【问题标题】:Convert Bouncy castle aes key to UTF-8 string将 Bouncy castle aes 密钥转换为 UTF-8 字符串
【发布时间】:2017-07-06 13:25:51
【问题描述】:

我的程序生成 AES 密钥,用 rsa 算法加密并发送到服务器。但是当我从服务器获取它并解密时,一些字节被损坏并替换为序列239 191 189 根据这个问题 UTF-8 Encoding and decoding issue 我意识到问题在于服务器(也解密密钥)将其存储为 UTF-8 字符串。有什么方法可以创建“UTF-8 友好”键吗?现在如何生成密钥:

        IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS7Padding");
        CipherKeyGenerator aesKeyGenerator = new CipherKeyGenerator();
        var rand = new SecureRandom();
        aesKeyGenerator.Init(new KeyGenerationParameters(rand, 256));
        byte[] key = aesKeyGenerator.GenerateKey();
        var aesKey = ParameterUtilities.CreateKeyParameter("AES", _key);
        var iv = new byte[32];
        rand.NextBytes(iv);
        ParametersWithIV aesKeyParam = new ParametersWithIV(aesKey, iv);

【问题讨论】:

  • 生成的密钥可能不是文本,而是字节数组。至少它应该是。不要尝试将密钥直接转换为 UTF-8。而是使用 Base64 将密钥字节转换为字符。当然,在将 Base64 用作密钥之前,您需要将其转换回原始字节。

标签: c# encryption utf-8 bouncycastle


【解决方案1】:

您的 AES 密钥由位/字节组成。 如果你想查看它你可以转换字节然后你应该使用这些字节的十六进制编码。通常你不需要这样做:AES 密钥应该是二进制的。

只有在调试过程中转换为十六进制才有意义。由于这是关键材料,因此在代码正常运行后删除这些行也是有意义的 - 您可以使用测试密钥执行单元测试以验证正确性。

如果您需要通过文本接口(SOAP、JSON、XML 等)发送加密密钥,将 RSA 加密密钥转换为 base 64 是有意义的)。不用说,您应该在收到 wrapped(即加密的)密钥后将其转换回二进制文件。

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 2020-04-22
    • 2015-06-24
    • 2014-04-20
    • 2015-03-18
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多