0

该代码适用于 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
4

1 回答 1

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,否则为 0。

tic并且toc习惯于计算这个 for 循环需要多长时间。

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

变量rt未使用。

于 2012-04-23T12:28:55.510 回答