关于Blowfish算法的关键生成算法的建议

时间:2012-04-23 10:21:35

标签: matlab encryption blowfish

代码适用于MATLAB,我想了解他们究竟想要做什么。我是matlab的新手,所以需要一些建议。请帮忙

function [key] = keyGen(n)
n = n*8;
% n = 2048*2048*16;
% n = 24 * 24 * 8;
bin_x = zeros(n,1,'uint8');
r = 3.9999998;
bin_x_N_Minus_1 =  0.300001;
x_N = 0;
tic

for ind = 2 : n
     x_N = 1 - 2* bin_x_N_Minus_1 * bin_x_N_Minus_1;    
      if (x_N > 0.0)
         bin_x(ind-1) = 1;
      end 
        bin_x_N_Minus_1 =  x_N;

      end
toc
%save bin_sec bin_x;
t = uint8(0);
key = zeros(n/8,1,'uint8');
for ind1 = 1 : n/8

    for ind2 = 1 : 8
    key(ind1) = key(ind1) + bin_x(ind2*ind1)* 2 ^ (ind2-1);
    end

end

1 个答案:

答案 0 :(得分:0)

参数n是密钥中的字节数。 n*8是将其转换为多个位。 bin_x用于存储密钥的二进制表示。 bin_x_N_Minus_1是我们用来计算下一位的值。

在第一个for循环中,我们遍历键中的位(第一位始终为0)。我们使用该公式计算x_N(bin_x_N_Minus_1是x_N的先前值)。如果x_N为正,则密钥中的相应位为1,否则为零。

tictoc用于计算此for循环所需的时间。

第二个for循环将密钥的位转换为字节,并将它们存储在输出数组key中。 key中的第K个条目是通过从bin开始在bin_x中取每个第(N / 8)个条目表示的8位数。

变量rt未使用。