如何将字节数组与字符串相互转换?

问题描述 投票:0回答:1

我正在将 byte[] 转换为字符串并返回。 转换回来的 byte[] 与原始的不一样。

如何正确地将字节转换为字符串并返回?

一个控制台应用程序来说明这一点: 程序.cs

_ = new TestByteConversion();

TestByteConversion.cs

    internal class TestByteConversion
{
    public TestByteConversion()
    {
        var aes = Aes.Create();
        aes.GenerateKey();
        var keyAsString = GetKeyAsString(aes.Key);

        // I save it in a key value pair as string.
        // I get the value as string from dictionary.
        var keyAsyBytes = GetKeyFromString(keyAsString);

        // USE NuGet ConsoleTables !
        var table = new ConsoleTable("ID", "origin", "char", "new value");

        for (var i = 0; i < keyAsString.Length; i++)
        {
            table.AddRow(i, aes.Key[i], keyAsString[i], keyAsyBytes[i]);
        }

        table.Write();
    }

    public static byte[] GetKeyFromString(string keyAsString)
    {
        return Encoding.ASCII.GetBytes(keyAsString);
    }

    public static string GetKeyAsString(byte[] byteArray)
    {
        return Encoding.ASCII.GetString(byteArray);
    }
}
c# converters
1个回答
3
投票

来自

ASCIIEncoding.GetString
文档:

ASCIIEncoding 不提供错误检测。任何大于十六进制

0x7F
的字节都会被解码为 Unicode 问号(“?”)。

并且

0x7F
为 127,而字节最多为 255,因此如果密钥有任何大于
0x7F
的字符,您最终将得到不可逆的转换。尝试改用
Convert.ToBase64String
/Convert.FromBase64String 方法(或
Convert.ToHexString
/
Convert.FromHexString
)。

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