
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3 NewDES加密算法
NewDES加密算法是Robert Scott于1985年设计的,其目的是成为DES加密算法的替代算法。NewDES加密算法是基于64比特的明文分组进行运算的,密钥长度为120比特。在设计上,所有的运算都针对完整的字节,而不像DES加密算法那样要进行大量特定比特的读写或置换操作,这使得NewDES加密算法的软件实现更为简单方便。
1.3.1 NewDES加/脱密编制
将64比特的明文分组分成8个单字节长的子分组 B0、B1、…、B6、B7,这些子分组要运行17轮,每一轮有8步。在每一步中,其中一个子分组与某个密钥进行模2加,然后用非线性函数f输出代替字节,接着与另一个子分组进行模2加并生成这个子分组。120比特的密钥分成15个密钥子分组K0、K1、…、K13、K14。NewDES加密算法如图1.3.1所示。

图1.3.1 NewDES加密算法
NewDES加/脱密算法的C语言表述如下:
char B0, B1, B2, B3, B4, B5, B6, B7; char Key[15]; int initi, delta, fini;
当加密时,初始设置为:
initi=0; delta=1; fini=0;
当脱密时,初始设置为:
initi=11; delta=9; fini=12;
相关代码如下:
NewDES() { int i; i=initi; while(1) { B4=B4^f[B0^Key[i++]]; if(i==15) i=0; B5=B5^f[B1^Key[i++]]; if(i==15) i=0; B6=B4^f[B2^Key[i++]]; if(i==15) i=0; B7=B7^f[B3^Key[i]]; i=i+delta; if(i>14) i=i-15; if(i==fini) return; B1=B1^f[B4^Key[i++]]; B2=B2^f[B4^B5]; B3=B3^f[B6^Key[i++]]; B4=B0^f[B7^Key[i]]; i=i+delta; if(i>14) i=i-15; } }
1.3.2 非线性函数f的选取
NewDES加/脱密编制中的非线性函数f实际上是一个字节到字节的伪随机置换,其输入和输出都是0~255之间的一个数。
Robert Scott在设计此函数时以著名的美国“独立宣言”为输入文本,通过执行如下过程:
for(i=0; i<256; i++) f[i]=i; i=0; j=0; while( (c=getchar())!=EOF ) { if(c>′Z′) c=c-32; if(c>=′A′&& c<=′Z′) { i=(i+1) & 255; j=(j+c) & 255; k=f[i]; f[i]=f[j]; f[j]=k; } }
得到的置换表为
f[0……255]=
23 137 239 188 102 125 221 72 212 68 81 37 86 237 147 149
70 229 17 124 115 207 33 20 122 143 25 215 51 183 138 142
146 211 110 173 1 228 189 14 103 78 162 36 253 167 116 255
158 45 185 50 98 168 250 235 54 141 195 247 240 63 148 2
224 169 214 180 62 22 117 108 19 172 161 159 160 47 43 171
194 175 178 56 196 112 23 220 89 21 164 130 157 8 85 251
216 44 94 179 226 38 90 119 40 202 34 206 35 69 231 246
29 109 74 71 176 6 60 145 65 13 77 151 12 127 95 199
57 101 5 232 150 210 129 24 181 10 121 187 48 193 139 252
219 64 88 233 96 128 80 53 191 144 218 11 106 132 155 104
91 136 31 42 243 66 126 135 30 26 87 186 182 154 242 123
82 166 208 39 152 190 113 205 114 105 225 84 73 163 99 111
204 61 200 217 170 15 198 28 192 254 134 234 222 7 236 248
201 41 177 156 92 131 67 249 245 184 203 9 241 0 27 46
133 174 75 18 93 209 100 120 76 213 16 83 4 107 140 52
58 55 3 244 97 197 238 227 118 49 79 230 223 165 153 59