有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

加密获取密钥流Java解密

我使用Java的密码类进行解密

几个问题:

  1. 在OFB中使用DES解密,对于多部分解密,是否可以在第一次迭代中生成密钥流,但不将该密钥流用于XORing,但仍将密钥流提供给下一个分组密码

我的代码(简要)如下:

desCipher = Cipher.getInstance("DES/OFB56/NoPadding");
desCipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameter);
for (i=0;i<subframeCount;i++){
// perform the skip iteration here
  if (firstFrame){
      byte[] dummy = new byte[7];
      dummy[0] = 1;dummy[1] = 12;dummy[2] = 12;dummy[3] = 15;dummy[4] = 26;dummy[5] = 12;dummy[6] = 12;
      desCipher.update(dummy);
  }
  if (not_last_frame){
      decryptedVCW = desCipher.update(vcwShift_E);
  }
  else{
      decryptedVCW = desCipher.doFinal(vcwShift_E);
  }

}

我不确定它是否真的在更新(伪)操作中跳过XORing,然后在下一个分组密码中使用密钥流

  1. 是否可以为每个操作检索密钥流?如果能看到确切生成了什么,那就太好了

谢谢希夫


共 (2) 个答案

  1. # 1 楼答案

    我发现第一次迭代确实跳过了XORing阶段

    可以通过使用解密的VCW对纯文本进行XORing来找到密钥流(这对我来说应该是显而易见的)

  2. # 2 楼答案

    1. 是的,OFB就是这样工作的:加密(密钥流)的输出直接作为下一个块的输入,所以XOR ing部分独立于加密引擎,就像流密码一样

    2. 获取密钥流的另一种方法不是用明文进行异或运算,而是只使用零进行异或运算(或调用update()/doFinal()),您将获得实际的密钥流。以防你想看看密钥流是什么样子。但你的方法显然也会奏效,我只是为了完整起见才加上这个