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

标签 c# encryption cryptography

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

加密数据的填充为 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/

相关文章:

c# - ajax beginForm 忽略指定按钮

c# - 使用绑定(bind)设置用户控件中文本框的文本属性 - WPF

c# - MVC 在同一用户登录后注销所有事件 session

.net - 如何在 .net 中解码私钥的 BASE64、PCKS-8 表示形式?

php - Laravel 5 SSL - 使用过时的密码学加密

math - 构造简单的非对称 RSA key 对的示例

c# - 你调用的对象是空的。 (HttpContext.Current.Request)

java - JAVA GUI 中的复选框菜单项 Decrypt

passwords - 尝试理解加盐密码的概念

database - 避免在 Postgres 表中有超过 1500 列