.Net 1.1 C#加密/解密的输出与java不同步



给定值:应加密的参数加密的密钥

算法@>Net 1.1 C#:

  1. 首先将原始参数转换为字节(使用Unicode小端编码)->Byte_Expression
  2. 用填充字符填充Byte_Expression(0):填充因子为8(最多填充8字节)->Byte_Express 8
  3. 现在将KEY从String转换为Base64编码的ByteArray->ByteKEY
  4. 使用DES3加密的Byte_Expression8:
  5. 密码:ECB(电子代码簿)
  6. 填充:使用零
  7. defaultinitialvvector:={0×00,0×00
  8. Key=ByteKEY(参考文献3)
  9. DES3加密字节数组
  10. 使用Base64Encryption将DES3ecryptedByteArray转换为字符串->加密参数
  11. 完成

已经使用了上面的Algorithm@Java7。在ECB加密模式下,它会抛出一个错误,但它在CBC模式下运行良好。

结果:.Net的OUTPUT;Java不是snyc

问题:java.security.InvalidAlgorithmParameterException:ECB模式无法使用IV

ECB不支持IV,因此在Java中不应使用带有第三个参数的Cipher.init方法。有些库允许为ECB插入IV值(特别是PHP的mcrypt包装器和.NET),但在这些情况下,IV会被忽略。幸运的是,我还没有看到在ECB加密期间只将IV用于第一个块的实现。

如果使用CBC模式——ECB不安全——那么零IV意味着第一个块将与ECB模式相同(直接AES加密)。这意味着使用同一密钥进行多次加密也不安全。CBC需要一个随机IV值。

最新更新