首页 > 解决方案 > 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);
    }

我怎样才能使它适用于任何大小的输入?

标签: c#securityencryptioncryptographybouncycastle

解决方案


改为使用AESWrapPadEngineAESWrapEngine实现RFC3394要求输入是块大小的倍数。 允许输入为任意随机长度的AESWrapPadEngine实现。RFC5649


推荐阅读