获取密钥流 - Java 解密
Getting keystream - Java Decryption
我正在使用 Java 的密码 class 进行解密。
几个问题:
- 使用 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);
}
}
我不确定它是否确实跳过更新(虚拟)操作中的异或运算,然后将密钥流用于下一个分组密码。
- 是否可以为每个操作检索密钥流?最好看看到底生成了什么。
谢谢 Shiv
我发现第一次迭代确实跳过了异或阶段。
可以通过将纯文本与解密的 VCW 进行异或来找到密钥流(这对我来说应该很明显)
是的,这就是 OFB 的工作原理:加密的输出(密钥流)直接作为下一个块的输入,因此 XOR-ing 部分独立于加密引擎,就像流密码一样。
另一种获取密钥流而不是 XOR-ing 明文的方法是仅使用零进行异或(或调用 update()/doFinal()
),您将获得实际的密钥流。以防万一您想查看密钥流的样子。但是你的方法显然也有效,我只是为了完整起见才添加这个。
我正在使用 Java 的密码 class 进行解密。
几个问题:
- 使用 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);
}
}
我不确定它是否确实跳过更新(虚拟)操作中的异或运算,然后将密钥流用于下一个分组密码。
- 是否可以为每个操作检索密钥流?最好看看到底生成了什么。
谢谢 Shiv
我发现第一次迭代确实跳过了异或阶段。
可以通过将纯文本与解密的 VCW 进行异或来找到密钥流(这对我来说应该很明显)
是的,这就是 OFB 的工作原理:加密的输出(密钥流)直接作为下一个块的输入,因此 XOR-ing 部分独立于加密引擎,就像流密码一样。
另一种获取密钥流而不是 XOR-ing 明文的方法是仅使用零进行异或(或调用
update()/doFinal()
),您将获得实际的密钥流。以防万一您想查看密钥流的样子。但是你的方法显然也有效,我只是为了完整起见才添加这个。