获取密钥流 - Java解密

时间:2016-01-13 01:30:18

标签: java encryption cryptography des block-cipher

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

几个问题:

  1. 对OFB使用DES解密,对于多部分解密,是否可以在第一次迭代中生成密钥流,但不能使用该密钥流进行异或,但仍将密钥流提供给下一个分组密码?
  2. 我的代码(简要)如下:

    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. 谢谢Shiv

2 个答案:

答案 0 :(得分:2)

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

  2. 获取密钥流比使用明文进行异或的另一种方法是仅使用零进行XOR(或调用update()/doFinal()),您将获得实际的密钥流。以防万一你想知道密钥流的样子。但是你的方式显然也会起作用,我只是为了完整起见而添加它。

答案 1 :(得分:0)

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

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