谁能告诉我下面的代码为什么间歇性地引发异常?
我正在运行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);