[这个贴子最后由x86在 2005/07/03 11:22pm 第 2 次编辑]
鹦鹉这么快就回来了啊???
一次一密的密钥必须是随机的且与信息同样长度的.然后与明文进行异或,解密的时候,只要进行同样的异或就可以了.跟其他许多对称密钥体制一样,密钥的产生以及传输是这种加密方法最关键的地方.即如何去产生真正的不可预测的随机的比特流序列以及如何传输到对方?即如何产生上面代码中的keyBytes是最重要的!
下面有2种方法可以产生不可预知的比特流:
1:利用单向函数
假设有一个函数f,一个随机的输入s.定义x=f(s+j),然后设b是x的最低有效比特.那么序列j=1,2,3,4,5.....和一些随机数s所生成的b就会组成一个伪随机序列.des和安全散列算法就是利用单向函数来产生随机序列的.
2:Blum-Blum-Shub(BBS)伪随机序列产生器.又名:二次方程式残数生成器.过程是这样的:首先生成2个大的素数p和q.而且他们都是同余于3模4的.设n=pq,并选择一个随机的整数数x,x和n是互素的.初始化bbs生成器,初始输入为S(0)=x的平方(mod n),则通过下列循环产生随机序列:
1:S(j)=S(j-1)的平方(mod n)
2:B(j)是S(j)的最低有效比特,实际上就是奇偶性.
example:
p=3,q=7,n=21,s=6
初始S(0)=S的平方(mod 21)=15
S(1)=S(0)的平方(mod 21)=3
S(2)=9
S(3)=19
S(4)=4
S(5)=16
.
.
.
则得到序列B(1),B(2),B(3),B(4),B(5)为111100
|