c# - BouncyCastle AES 密钥包装 - 8 字节的倍数错误
问题描述
我正在尝试使用 BouncyCastle 的 AES Key Wrap 来执行确定性加密。但我收到以下错误:
Org.BouncyCastle.Crypto.DataLengthException: 'wrap data must be a multiple of 8 bytes'
这是我的代码:
static void Main(string[] args)
{
var txt = UTF8Encoding.UTF8.GetBytes("Some text here.");
var key = UTF8Encoding.UTF8.GetBytes("aaaaaaaaaaaaaaaa");
var encyptedBytes = Wrap(key, txt);
}
public static byte[] Wrap(byte[] kek, byte[] plaint)
{
var en = new AesWrapEngine();
en.Init(true, new KeyParameter(kek));
return en.Wrap(plaint, 0, plaint.Length);
}
public static byte[] Unwrap(byte[] kek, byte[] ciphert)
{
var en = new AesWrapEngine();
en.Init(false, new KeyParameter(kek));
return en.Unwrap(ciphert, 0, ciphert.Length);
}
我怎样才能使它适用于任何大小的输入?
解决方案
改为使用AESWrapPadEngine
。 AESWrapEngine
实现RFC3394
要求输入是块大小的倍数。 允许输入为任意随机长度的AESWrapPadEngine
实现。RFC5649
推荐阅读
- sql - 有没有办法将 2 个数据库置于调试和发布配置中,并在 2 个数据库之间切换以进行调试和发布模式?
- angular - 以 Angular 8 引用 Angular 材料为例,将组件注入到组件中
- javascript - Sails.js 测试中的超时问题
- flutter - 当用户单击平面按钮时如何在颤动中显示奖励视频
- java - Tomcat 7.0 版本上的 spring boot 2.2.1 Web 应用程序部署问题
- maven - 执行 org.apache.maven.plugins:maven-site-plugin:3.7.1:site:org/apache/maven/reporting/AbstractMavenReport 时缺少必需的类
- c - C程序执行成功显然取决于文件名
- java - 如何解决 PDFBox 中没有 unicode 映射错误?
- javascript - 使用 AJAX 或 jquery 登录到另一个站点而不重新加载页面
- r - 熔化 data.table 时如何指定一个空的 id.vars 向量?