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

juzqafwq  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(279)

我正在尝试实现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数组中,但是这不起作用,因为其中的值是value而不是数组。我考虑过在数组[0]中添加arrays元素,并将0从元素[1]放到[length]中,但我不确定这是否正确,因为我处理的是字节,所以我不知道0是否真的有字节值。所以我想听听你的想法,我请求你的帮助。

rnmwe5a2

rnmwe5a21#

这个 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的细节,但一个简单的方法可能是让索引在变得太大时“ Package ”:

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

相关问题