【问题标题】:Should I encode the data before hashing it?我应该在散列之前对数据进行编码吗?
【发布时间】: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


【解决方案1】:

解码 base-64 时会发生该错误,因为有效的 base-64 字符串始终是 4 个字符的倍数(有时带有一些填充字符)。不,您不需要将 输入 编码/填充到ToBase64String。相反,当您 传输 / 存储它时,听起来您丢失了一些字符(您是否可能在查询字符串中传递它,并且有一个 + vs 空格问题?)

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2019-08-21
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多