-25,50,111,23,14,-106,-61,-72,98,-24,-117,-60,-10,3,70,70,Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
at JavaTest.HashTest(JavaTest.java:306)
at JavaTest.main(JavaTest.java:28)数组越界了,那么是不是说这个数组应该是16位以上呢? byte[] pucHash = new byte[16];
int[] puiHashLength = new int[16];
javaapi.HashFinal(sessionhandle, pucHash, puiHashLength);
for (int i = 0; i < puiHashLength[0]; i++)
{
System.out.print(pucHash[i] + ","); }
把pucHash[16]增大?
at JavaTest.HashTest(JavaTest.java:306)
at JavaTest.main(JavaTest.java:28)数组越界了,那么是不是说这个数组应该是16位以上呢? byte[] pucHash = new byte[16];
int[] puiHashLength = new int[16];
javaapi.HashFinal(sessionhandle, pucHash, puiHashLength);
for (int i = 0; i < puiHashLength[0]; i++)
{
System.out.print(pucHash[i] + ","); }
把pucHash[16]增大?
这句改成
for (int i = 0; i < pucHash.length; i++)
这样才能保证循环内部的pucHash[i]不会越界
还是用pucHash.length吧
puiHashLength.length获取的是数组的长度,只有循环数组的长度才不会越界。
比如puiHashLength是16,但是puiHashLength[0]的值是20
那么你的代码就循环了20次,而不是16次,所以越界了。
而实际上,输出结果确实是循环了128次。原理,我也不知道。估计是这个函数本身会把puiHash的长度存到Length数组的第一位吧。而我也试过,把他换成PucKey.length的形式,输出也是正确的! int keyhandle;
byte[] PucKey=new byte[128];
int[] PuiKeyLen=new int[16];
int uikeybits=128;//密匙模的比特长度 //生成会话密钥并用内部RSA公钥加密输出--返回会话密钥句柄
keyhandle = javaapi.GenerateKeyWithIPK_RSA(sessionhandle,uiIPKindex,uikeybits,PucKey,PuiKeyLen);
System.out.println("RSA会话密钥转化为byte数组:");
for(int i=0;i<PuiKeyLen[0];i++)
{
System.out.print(PucKey[i]+",");
}输出结果“:
RSA会话密钥转化为byte数组:
-125,-78,-97,83,-38,107,-29,-32,-57,-126,-77,72,23,126,115,54,89,116,-128,72,-22,-115,-3,-64,-50,56,37,102,22,-97,35,85,-100,-37,23,-26,-31,-8,4,127,-66,93,-38,101,49,-87,12,-9,-122,26,7,10,20,-5,-34,-45,-70,-78,-29,-62,-68,73,-88,-13,112,-34,-62,46,-113,84,-120,-121,-66,22,-17,75,-95,122,-27,-112,114,93,36,88,105,-3,86,7,105,-67,-89,97,-76,-101,95,-102,98,101,-75,-92,-92,-86,20,78,-112,-111,-53,-4,95,-126,-21,35,-107,114,-99,-34,29,-50,-35,21,-42,100,-28,-15,-21,101,21,33,
不管怎样,你要确保循环次数别超过数组长度
既然你不能确定PuiKeyLen[0]的值是什么,这样写代码就是不安全的
用pucHash.length才是安全的!
即取puiHashLength[0]和pucHash.length的最小值作为循环
for (int i = 0; i < Matt.min(puiHashLength[0], pucHash.length); i++)
{
System.out.print(pucHash[i] + ",");}