正在阅读:IBM的MARS加密算法实现(3)IBM的MARS加密算法实现(3)

2004-02-14 09:34 出处:PConline 作者:吴真 责任编辑:zwg
作者:吴真 转载请与作者联系 2.1密钥的生成 MARS算法支持128~448位变长密钥,定义一个临时容器ULONG32 T[15]用于存放用户输入的密钥, T[0,1…n] = K[0,1…n] T[n] = n ; T[n+1,…14] = 0 ; 其中n是用户输入密钥的长度(4字节为单位). 然后按照下面的算法进行操作: for ( j = 0 ; j < 4 ; j++) { for ( i = 0; i < 15 ;i++) { /*T[i] ^= ((T[(i-7)%15]^T[(i-2)%15])<<<3)^(4*i+j);*/ } for ( r = 0 ; r < 4 ; r++) { for ( i = 0; i < 15 ;i++) { /*T[i] = T[i]+ S[low 9 bits of T[(i-1)%15]])<<<9;*/ } } for ( i = 0 ; i < 10 ; i++) { /*T[10*j+i] = T[4*i%15];*/ } 最后我们需要修正那些在E-Fun操作中用作乘数的密钥也就是子密钥数组中的K[5],K[7],K[9],…K[35],要求他们的二进制表示形式中没有连续10个以上(含10个)的0或1. 需要修正的密钥为K[i] = K0K1K2…K30K31 保留K[i]的最低两位的值 n = K[i]&0x3, 把K[i]的最低两位置1 w = K[i] | 0x3 , 产生掩码M: 最低两位置1后的K的二进制表示中如果含有10以上连续的0或1,那么将这些连续位置1,其他的位置0,然后把最低的两位和最高位置0,最后把连续位(1或0单独算)的起始位和中止位置0. 例如: 产生掩码后,我们利用n值作为s-box的索引取得一个替代值,这个s-box含有4个32位的元素,每个元素的二进制表示不含7个(含7个)连续的1或0,MARA算法推荐的s-box为 ULONG32 B[4] = { 0xa4a8d57b , 0x5b5d193b , 0xc8a8309b , 0x73f9a978 } 然后利用如下算式得出K[i]: K[i] = w ^ (( B[n] <<< ( low 5 bits of K[i-1]) & M)

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品