Are*_*ian 2 .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);