日期:2014-05-18  浏览次数:20721 次

急切需要帮助
代码:
<body>
<p>
    <%  
   
      String   result=ddd.getdisksn();//通过jni获取的硬盘序列号
      String   mi=abc.getEncString( "75JO6066S00016CCA8767 ");des加密函数
      String   mi2=abc.getEncString(result);
%>
</p>
<p> <%=result%> </p>
<p> <%=mi%> </p>
<p> <%=mi2%> </p>

</body>

显示结果:
75JO6066S00016CCA8767

6VdCpwOTBuZ7BOdr4t36HQq7pIAkibDv

1oDXXNbNGEW8wqhK373KWHpcaZBLG78Y9vUueHSmqnZNBJsOY+CFbA==

问题:
      “75JO6066S00016CCA8767”应该和result的值是一样的,为什么加密出来的结果不一样呢?解密时通过abc.getEnsString(result)加密的内容就可以得到75JO6066S00016CCA8767的结果,而通过abc.getEncString( "75JO6066S00016CCA8767 ")加密的就不可以。


------解决方案--------------------
要么ddd.getdisksn()实现有问题,要么abc.getEncString()实现有问题。

------解决方案--------------------
加密解密 都会把相关的字符串 转换成为字节数组,字节数组是一个很奇怪的数组。同样的字符串
变成 字节数组就有可能出现偏差。所以当把字节数组还原成为字符串的时候 就有可能报错。
------解决方案--------------------
"75JO6066S00016CCA8767"和"75JO6066S00016CCA8767".toString()还是不一样的吧

String str = new String("75JO6066S00016CCA8767");
System.out.println(abc.getEncString(str));

这个试一下,应该也是对的