国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

IBM的MARS加密算法實(shí)現(xiàn)(3)

2019-11-17 04:39:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
作者:吳真

2.1密鑰的生成

MARS算法支持128~448位變長(zhǎng)密鑰,定義一個(gè)臨時(shí)容器ULONG32 T[15]用于存放用戶輸入的密鑰,
T[0,1…n] = K[0,1…n]
T[n] = n ;
T[n+1,…14] = 0 ;
其中n是用戶輸入密鑰的長(zhǎng)度(4字節(jié)為單位).
然后按照下面的算法進(jìn)行操作:


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操作中用作乘數(shù)的密鑰也就是子密鑰數(shù)組中的K[5],K[7],K[9],…K[35],要求他們的二進(jìn)制表示形式中沒(méi)有連續(xù)10個(gè)以上(含10個(gè))的0或1.
需要修正的密鑰為K[i] = K0K1K2…K30K31
保留K[i]的最低兩位的值 n = K[i]&0x3,
把K[i]的最低兩位置1 w = K[i] 0x3 ,
產(chǎn)生掩碼M:
最低兩位置1后的K的二進(jìn)制表示中假如含有10以上連續(xù)的0或1,那么將這些連續(xù)位置1,其他的位置0,然后把最低的兩位和最高位置0,最后把連續(xù)位(1或0單獨(dú)算)的起始位和中止位置0.
例如:

產(chǎn)生掩碼后,我們利用n值作為s-box的索引取得一個(gè)替代值,這個(gè)s-box含有4個(gè)32位的元素,每個(gè)元素的二進(jìn)制表示不含7個(gè)(含7個(gè))連續(xù)的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)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新干县| 饶平县| 临澧县| 高青县| 安阳县| 上蔡县| 遂昌县| 德令哈市| 鄂温| 定州市| 富源县| 宣恩县| 北碚区| 石河子市| 五台县| 南昌市| 桓台县| 南丰县| 土默特左旗| 临桂县| 鄂托克旗| 大化| 龙游县| 宣汉县| 凤台县| 玛纳斯县| 都兰县| 莱西市| 红原县| 渝中区| 普安县| 禄劝| 隆安县| 青川县| 桂阳县| 凌源市| 民权县| 永年县| 通州区| 顺平县| 西乡县|