【发布时间】: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