在byte [] keyValue中添加两个encr / decr键

时间:2014-03-11 14:58:51

标签: java arrays byte

我正在尝试实现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有一个字节值。所以我想听听你的想法,我要求你的帮助。

1 个答案:

答案 0 :(得分:0)

NullPointerException不是由数组可能不同的长度引起的,而是keyValuenull的事实。你可以添加

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]);
    }
}