官术网_书友最值得收藏!

1.3 NewDES加密算法

NewDES加密算法是Robert Scott于1985年設計的,其目的是成為DES加密算法的替代算法。NewDES加密算法是基于64比特的明文分組進行運算的,密鑰長度為120比特。在設計上,所有的運算都針對完整的字節,而不像DES加密算法那樣要進行大量特定比特的讀寫或置換操作,這使得NewDES加密算法的軟件實現更為簡單方便。

1.3.1 NewDES加/脫密編制

將64比特的明文分組分成8個單字節長的子分組 B0B1、…、B6B7,這些子分組要運行17輪,每一輪有8步。在每一步中,其中一個子分組與某個密鑰進行模2加,然后用非線性函數f輸出代替字節,接著與另一個子分組進行模2加并生成這個子分組。120比特的密鑰分成15個密鑰子分組K0K1、…、K13K14。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
主站蜘蛛池模板: 阳朔县| 来凤县| 东阳市| 南宫市| 麻城市| 大邑县| 双江| 阿克陶县| 永年县| 饶阳县| 冀州市| 南郑县| 周至县| 新宁县| 泗阳县| 叶城县| 彭阳县| 随州市| 安徽省| 武清区| 隆回县| 三明市| 乐至县| 海城市| 郯城县| 比如县| 探索| 滕州市| 汉川市| 汉寿县| 天全县| 枣阳市| 栾川县| 河源市| 惠东县| 嘉祥县| 富锦市| 蒙阴县| 浙江省| 云和县| 山东|