我的公司有一个旧库,为我们加密数据。它无法在我们的新环境中使用,因此我尝试为我们的旧数据编写解密方法。
加密数据的填充为 PKCS5,又名 RFC 1423。在使用 .net AesCryptoServiceProvider 类的过程中,我注意到枚举器中没有内置这样的填充方案。到目前为止,我所有解密的数据都是乱码。我们这里没有密码学专业人士,我正在即时学习。如有任何帮助,我们将不胜感激。
我目前正在实现发现的代码 here .
这个问题也发布在密码学网站here上。然而他们似乎并没有专门针对 .net,所以我也想咨询这里的专家。
编辑
旧的加密具有以下设置,这些设置在手动完成时似乎会导致 .net 中出现错误 - 特别是 IV 和 block 大小。
block 大小:16
密码模式:cbc
加密算法:aes
哈希值:sha1
IV: 字节[0]
key 长度:128
盐:字节[0]
键:字节[16]
因此, key 和 block 大小根据需要匹配,但没有 IV 集会在 .net 中引发错误, block 大小也会引发错误。
最佳答案
查看AesCryptoService padding文档中默认填充是 PKCS#7。 PKCS#7 填充是 PKCS#5 填充的超集。
参见PaddingMode Enumeration了解更多信息。
PKCS#5 填充仅针对 8 字节 block 大小定义,PKCS#7 填充将定义的 block 大小扩展到 256 字节。 PKCS#5 从来都不是 AES 的正确填充,因为 AES 的 block 大小为 16 字节,但名称的使用是从其他历史加密库继承而来的。
参见PKCS#7 Padding .
关于c# - 如何在 C# 中手动使用 PKCS5 (RFC 1423) 填充进行 AES 解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302510/