.net - 使用 System.Text.UnicodeEncoding.Unicode.GetString(byte[]) 反向编码字节数组时间歇性失败

标签 .net unicode encoding cryptography

有人能告诉我为什么下面的代码间歇性地抛出异常吗? 我正在运行 Vista Ultimate 32 位和 VS2010 .NET4

       byte[] saltBytes = new byte[32];

        RNGCryptoServiceProvider.Create().GetBytes(saltBytes);

        string salt = System.Text.UnicodeEncoding.Unicode.GetString(saltBytes);

        byte[] saltBytes2 = System.Text.UnicodeEncoding.Unicode.GetBytes(salt);

        int i = 0;
        foreach(byte b in saltBytes)
        {
            if (saltBytes[i] != saltBytes2[i])
            {
                throw new Exception();
            }

            i++;
        }

最佳答案

这可能是因为随机字节的任意序列不一定可转换为合法的 unicode 字符串。

当您的随机字节可转换为合法的 unicode 时,您的编码/解码将无误地工作;当它们不可转换时,您就会遇到问题。

如果您需要随机字节序列的字符串表示,那么您可能应该使用 Base-64 编码:

string salt = Convert.ToBase64String(saltBytes);

byte[] saltBytes2 = Convert.FromBase64String(salt);

关于.net - 使用 System.Text.UnicodeEncoding.Unicode.GetString(byte[]) 反向编码字节数组时间歇性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543752/

相关文章:

node.js - 如何让 Mocha 测试编译 Ruby-ish Unicode 字符串?

java - 用户在 Spring 3 MVC 中的请求周期中看到 unicode 文本的表示不一致

java - 将字符转换为 UTF-8

asp.net - ASMX Web 服务对传入请求使用错误的编码

c# - 为什么重写 == 必须重写 equals?

c# - Web 应用程序中基于文化的 ToString() 方法

.net - RDLC 如何使文本对齐?

.net - Azure 表存储性能 - REST 与 StorageClient

java - 将韩文音节分解为字母 (jamo)

windows - 如何在 Windows 批处理脚本中更改重定向文件的文件编码?