急切需要帮助
代码:
<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));
这个试一下,应该也是对的