我正在尝试实现Diffie Hellman算法来交换我的加密密钥,而且我在将总数分配给我的数组时遇到了问题。这就是我的尝试:
private static final String privatekey = "password";
private static final String publickey = "aloha";
private static final byte[] b = privatekey.getBytes();
private static final byte[] c = publickey.getBytes();
private static byte[] keyValue;
public void createCommonKey(){
for(int i=0; i<b.length; i++){
keyValue[i]=(byte)(b[i]+c[i]);
}
System.out.println(keyValue);
}
当我尝试运行它时,给我一个nullPointerException。我理解为什么我得到它,因为这两个键的长度与数组的长度不同。这就是我要问的,我需要纠正什么来使这项工作。起初我尝试单独添加每个数组并获取这两个值并将它们添加到keyValue数组但是这样做没有用,因为值,其中,好吧,valus而不是数组。我想在数组[0]中添加数组元素,从元素[1]添加0到[长度],但我不确定是否正确,因为我正在处理字节,我不知道实际上是否0有一个字节值。所以我想听听你的想法,我要求你的帮助。
答案 0 :(得分:0)
NullPointerException
不是由数组可能不同的长度引起的,而是keyValue
为null
的事实。你可以添加
public void createCommonKey(){
keyValue = new byte[b.length]; // <-- This line
for(int i=0; i<b.length; i++){
...
使此错误消失。
但是,数组的长度不同,当ArrayIndexOutOfBoundsException
大于b.length
时,会导致c.length
。我不知道Diffie-Hellmann的细节,但是一个简单的方法可能让索引在它们变得太大时“换行”:
public void createCommonKey()
{
int max = Math.max(b.length, c.length);
keyValue = new byte[max];
for(int i=0; i<max; i++)
{
int ib = i % b.length;
int ic = i % c.length;
keyValue[i]=(byte)(b[ib]+c[ic]);
}
}