比异或慢。
异或的破解方法,如果知道一段明文和密文。异或一下就得到密钥。
二者都是序列密码。异或要有足够长的序列,一次一密才安全。
你可以设想通信双方,客户端和服务器,一个服务器可以与许多的客户端对话。那么这么多对会话,怎样实现共享一个规模巨大的,一次一密的密码本?即使在一个会话里,怎样在无数个交互中使用一次一密?所以,异或法,不可能在广泛的通信场合中使用。
这个ENIGMA不可能从已知明文和密文猜出密钥。图灵就猜出来过(它那个密钥,就是3个字母,好猜,我们这个不是),但是这次改进了,图灵也猜不出来了。
它可以用较短的密钥,生成一个转轮机,本转轮机可以生成长达63+1K的序列(原始的ENIGMA是17576的序列)。如果明文很长,序列将被循环利用。
见原帖3楼的实例:
int main(int ac,char *av[])
{
char buf[131702];//128K,用于测试序列周期
int len,i,len1;
ENIGMA t;
ENIGMA2 egm;
struct timeval beg,end;
enigma1_init(t,"永 垂 不 朽,Enigma");//生成转轮,这就是一个测试,用汉字做密钥真不是好办法,双方不是一个字符集就瞎了
。。。。。。
在每次会话开始,双方约定一个密钥,各自生成相同的转轮,就可以在一个会话生命期内反复使用这个转轮,效率很高的算法。
这个算法,在网络通信领域很有价值。一般使用的DES,AES等等是分组密钥,加密要凑整个分组,在通信包头里要指明在整个数据包里有多少是有效字节,用于剔除填充字节。在已经应用中的包头里添加参数信息,会导致整个系统的颠覆式升级(新旧协议不兼容)。所以在一个旧系统升级加密功能,用分组密钥是不方便的。
【 在 callmebbser 的大作中提到: 】
: 与异或运算比,优点在哪?速度与异或运算比如何?
:
--
修改:ylh1969 FROM 221.221.50.*
FROM 221.221.50.*