将 Bouncy castle aes 密钥转换为 UTF-8 字符串

Convert Bouncy castle aes key to UTF-8 string

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

        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);

您的 AES 密钥包含 bits/bytes。 IF 你想查看它你可以转换字节然后你应该使用这些字节的十六进制编码。不过,通常您不需要:AES 密钥应保持二进制。

只有在调试期间转换为十六进制才有意义。由于这是关键 material 在代码运行后删除这些行也是有意义的 - 您可以使用测试键执行单元测试以验证正确性。

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