如何在C#中手动使用PKCS5(RFC 1423)填充进行AES解密?

时间:2016-02-09 21:27:33

标签: c# encryption cryptography

我的公司有一个旧库,可以为我们加密数据。它无法在我们的新环境中使用,因此我尝试为旧数据编写解密方法。

加密数据有一个填充PKCS5,a.k.a。RFC 1423.在使用.net AesCryptoServiceProvider类的过程中,我注意到枚举器中没有内置填充方案。到目前为止,我所有的解密数据都是乱码。我们这里没有密码学专家,我正在学习。任何帮助的指针都值得赞赏。

我目前正在实施代码here

此问题也发布在加密网站here上。但是他们似乎没有特别解决.net问题,所以我也想在这里与专家联系。

修改

旧加密具有以下设置,这些设置在手动完成时似乎会导致.net中的错误 - 特别是IV和块大小。

BlockSize:16
CipherMode:cbc
CryptAlgorithm:aes
哈希:sha1
IV:byte [0]
KeyLength:128
盐:字节[0]
密钥:byte [16]

因此,密钥和块大小根据需要匹配,但是没有IV集在.net中引发错误以及块大小引发错误。

1 个答案:

答案 0 :(得分:4)

查看AesCryptoService padding文档,默认填充是PKCS#7。 PKCS#7填充是PKCS#5填充的超集。

有关详细信息,请参阅PaddingMode Enumeration

仅为8字节块大小定义PKCS#5填充,PKCS#7填充将定义的块大小扩展为256字节。 PKCS#5从来都不是AES的正确填充,它具有16字节的块大小,但名称使用是从其他历史加密库中继承的。

请参阅PKCS#7 Padding