0

我正在使用 Java 的 Cipher 类进行解密。

几个问题:

  1. 使用 DES 解密和 OFB 进行多部分解密,是否可以在第一次迭代中生成密钥流,但不使用该密钥流进行异或运算,但仍将密钥流输入下一个分组密码?

我的代码(简要)如下:

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. 是否可以检索每个操作的密钥流?看看到底生成了什么会很好。

谢谢希夫

4

2 回答 2

2
  1. 是的,这就是 OFB 的工作原理:加密的输出(密钥流)直接作为输入提供给下一个块,因此 XOR-ing 部分独立于加密引擎,就像流密码一样。

  2. 获取密钥流的另一种方法是与纯文本进行异或运算,即update()/doFinal()仅对零进行异或(或调用),您将获得实际的密钥流。以防万一您想查看密钥流的样子。但是你的方式显然也可以,我只是为了完整性而添加这个。

于 2016-01-13T07:51:24.077 回答
0

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

可以通过用解密的VCW 对纯文本进行异或来找到密钥流(这对我来说应该很明显)

于 2016-01-13T02:13:58.300 回答