解决C语言与JAVA c#语言 DES 结果不一致问题

来源:互联网 发布:淘宝 收藏提升 编辑:程序博客网 时间:2024/06/04 20:11

  应该会有朋友遇到从网上下载的C语言算法计算出来的结果与 JAVA C#标准库计算结果不一致,经我仔细分析结果如下:

1    网上看到的C语言DES算法可能 如:http://blog.csdn.net/kamaliang/article/details/6691653,或者http://bbs.csdn.net/topics/391077711,  很多网页都是复制粘贴, 其实这个DES算法是有两个问题与标准算法不一致。


第一个问题:

          C语言中的算法:

   int Char8ToBit64(char ch[8],char bit[64]),调用了ByteToBit函数,而这个函数会将字节转成Bit位图(举例:0X2C ->00110100)

/*字节转换成二进制*/  int ByteToBit(ElemType ch, ElemType bit[8]){      int cnt;      for(cnt = 0;cnt < 8; cnt++){          *(bit+cnt) = (ch>>cnt)&1;      }      return 0;  }  
  而标准算法中ByteToBit函数,(举例:0X2C ->00101100), 正好反向了,所以造成makeSubKeys结果就不一致了。



第二个问题:

   C语言中的算法:

/*置换选择2*/  int PC_2[48] = {13,16,10,23,0,4,2,27,  14,5,20,9,22,18,11,3,  25,7,15,6,26,19,12,1,  40,51,30,36,<span style="background-color: rgb(255, 0, 0);">46,54,29,39,  50,44,32,46,</span>43,48,38,55,  33,52,45,41,49,35,28,31}; 
     其中红色标注的一段数据是有问题的,标准算法的数据是
<span style="background-color: rgb(255, 0, 0);"></span><pre name="code" class="html">/*置换选择2--标准*/  int PC_2[48] = {13,16,10,23,0,4,2,27,  14,5,20,9,22,18,11,3,  25,7,15,6,26,19,12,1,  40,51,30,36,<span style="background-color: rgb(255, 0, 0);">46,54,29,39,  50,44,32,<span style="background-color: rgb(255, 255, 0);">47</span>,</span>43,48,38,55,  33,52,45,41,49,35,28,31}; 


以上就是C语言DES算法在c#, java中计算结果不一致的原因。

0 0