我使用此代码来加密字符串(基本上,这是 Rijndael class on MSDN 上给出的示例):
public static String AESEncrypt(String str2Encrypt, Byte[] encryptionKey, Byte[] IV)
{
Byte[] encryptedText;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
// Use the provided key and IV
rijAlg.Key = encryptionKey;
rijAlg.IV = IV;
// Create a decrytor to perform the stream transform
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for encryption
using (MemoryStream msEncrypt = new MemoryStream())
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
// Write all data to the stream
swEncrypt.Write(str2Encrypt);
}
encryptedText = msEncrypt.ToArray();
}
}
return Encoding.Default.GetString(encryptedText);
}
我使用 Encoding.Default
将字节数组转换为字符串,但我不确定这是一个好的解决方案。我的目标是在文件中存储加密文本(例如密码...)。我应该继续使用 Encoding.Default
还是使用 Encoding.UTF8Encoding
或其他东西?
如果文件移动到不同的操作系统,当我尝试加密和解密它们时,这会对存储的值产生负面影响吗?
最佳答案
你应该绝对不要使用 Encoding将任意二进制数据转换为文本。 Encoding
适用于当您拥有真正编码文本的二进制数据时 - 这不是。
相反,使用 Convert.ToBase64String
将二进制数据编码为文本,然后使用 Convert.FromBase64String
解码.
关于c# - 用于将字节数组转换为字符串的编码,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7996955/