【发布时间】:2012-01-08 14:36:22
【问题描述】:
我是否应该在散列之前对数据进行编码以避免Invalid length for a Base-64 char array。
# 我的 .cs :
Stream des = file.InputStream;
byte[] data = new byte[file.ContentLength];
des.Read(data, 0, file.ContentLength);
FileStream f = new FileStream(targetFileName, FileMode.Create, FileAccess.ReadWrite);
f.Write(data, 0, data.Length);
f.Flush();
f.Close();
///////////////////////////////////////////////////////////////////////////////////////////
var sha = new System.Security.Cryptography.SHA512Managed();
string hash2 = Convert.ToBase64String(sha.ComputeHash(data));
如果答案是肯定的,如何编码字节数组。
注意:
我使用散列来唯一标识上传的文件以进行任何更改。
【问题讨论】:
-
@sehe 虽然是真的,但我认为这与问题的上下文无关,即创建 base-64 字符串。你不填充输入。
-
我在这里遇到了类似的问题stackoverflow.com/questions/4555249/… .. 如果我在编码我的数据之前遇到同样的问题,我公平地面临同样的问题
-
您究竟从哪里得到“base-64 char 数组的长度无效”错误?我很确定它不在显示的代码中......
-
无;那应该行得通;存储
hash2应该可以正常工作,只要您可靠地存储它。 -
你存储
hash2的地方是吗?我的意思是当你再次获取这个值时,仔细检查(在断点等处)你是否成功返回完全由ToBase64String生成的相同字符串,并且您在存储过程中没有损坏它。如果字符串完好无损,它将正常工作。如果出错,则几乎可以肯定该字符串没有被正确存储/获取,但这与它是 base-64 的事实无关,而只是与您的存储代码有关。
标签: c# asp.net hash encode sha