我使用Java的Cipher类进行解密。
几个问题:
- 使用OFB的DES解密,对于多部分解密,是否有可能在第一次迭代中生成密钥流,但不使用该密钥流进行异或运算,但仍将密钥流输入下一个分组密码
我的代码(简要地)如下:
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,然后使用密钥流进行下一个分组密码。
- 是否可以检索每个操作的密钥流?如果能看看到底生成了什么,那就太好了
感谢Shiv
-
是的,OFB就是这样工作的:加密的输出(密钥流)直接作为输入提供给下一个块,因此XOR部分独立于加密引擎,就像流密码一样。
-
获得密钥流的另一种方法,而不是与明文进行异或,是只与零进行异或(或调用
update()/doFinal()
),您将获得实际的密钥流。万一你想看看密钥流是什么样子。但你的方式显然也会起作用,我只是为了完整性而添加这个。
我发现第一次迭代确实跳过了XORing阶段。
密钥流可以通过将明文与解密的VCW(这对我来说应该是显而易见的)进行异或来找到