用于将Bytes数组转换为String的编码,反之亦然

问题描述 投票:14回答:4

我使用此代码对字符串进行加密(基本上,这是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或其他?

如果将文件移到不同的OS上尝试对其进行加密和解密,可能会对存储的值产生负面影响吗?

c# string encoding bytearray
4个回答
46
投票

您应该绝对不使用Encoding将任意二进制数据转换为文本。 Encoding用于当您拥有真正是编码文本的二进制数据时,不是-]。

相反,使用Convert.ToBase64String将二进制数据编码为文本,然后使用Convert.ToBase64String进行解码。


0
投票

是,Convert.FromBase64String是您机器的当前ANSI代码页,在多台机器/语言环境之间可能会有所不同。如果数据是文本数据并使其可移植,则需要使用固定的编码格式,例如UTF8。


0
投票

如果您的目标是将加密的信息存储在文件中,并且您有一个字节数组,则应直接存储它-完全不要将其转换为字符串。


-1
投票

不是在这里100%肯定,但我认为Encoding.Default是指系统默认编码,是的,可以在系统之间更改。

如果在我要使用的地方,我将使用UTF8或其他不会随系统而改变的编码。

© www.soinside.com 2019 - 2024. All rights reserved.