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

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

我正在尝试实现diffie-hellman算法来交换我的加密密钥,我在分配数组的总数时遇到了问题。这就是我尝试过的:

  1. private static final String privatekey = "password";
  2. private static final String publickey = "aloha";
  3. private static final byte[] b = privatekey.getBytes();
  4. private static final byte[] c = publickey.getBytes();
  5. private static byte[] keyValue;
  6. public void createCommonKey(){
  7. for(int i=0; i<b.length; i++){
  8. keyValue[i]=(byte)(b[i]+c[i]);
  9. }
  10. System.out.println(keyValue);
  11. }

当我尝试运行时,它会给我一个nullpointerexception。我明白为什么会这样,因为这两个键的长度与数组不同。这就是我要问的,我需要纠正什么才能让这一切顺利进行。一开始我试着分别添加每个数组,然后将这两个值添加到keyvalue数组中,但是这不起作用,因为其中的值是value而不是数组。我考虑过在数组[0]中添加arrays元素,并将0从元素[1]放到[length]中,但我不确定这是否正确,因为我处理的是字节,所以我不知道0是否真的有字节值。所以我想听听你的想法,我请求你的帮助。

rnmwe5a2

rnmwe5a21#

这个 NullPointerException 不是由于数组的长度可能不同,而是因为 keyValuenull . 你可以加上

  1. public void createCommonKey(){
  2. keyValue = new byte[b.length]; // <-- This line
  3. for(int i=0; i<b.length; i++){
  4. ...

使这个错误消失。
但是,数组的长度不同,这将导致 ArrayIndexOutOfBoundsException 什么时候 b.length 大于 c.length . 我不知道diffie-hellmann的细节,但一个简单的方法可能是让索引在变得太大时“ Package ”:

  1. public void createCommonKey()
  2. {
  3. int max = Math.max(b.length, c.length);
  4. keyValue = new byte[max];
  5. for(int i=0; i<max; i++)
  6. {
  7. int ib = i % b.length;
  8. int ic = i % c.length;
  9. keyValue[i]=(byte)(b[ib]+c[ic]);
  10. }
  11. }
展开查看全部

相关问题