c# - 在 C# 中使用用户的密钥通过 sha1 算法进行散列
问题描述
我需要根据 sha1 算法使用用户的密钥对字符串进行哈希处理,例如:hash = hash (string, secret_key).
我使用这段代码:
byte[] data = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
但我找不到如何在这个算法中使用密钥。
解决方案
散列是对数据应用散列函数的结果。它将任意数据映射到固定大小的值。这不需要任何秘密。
使用散列和密钥的加密过程是签名数据。您可能希望使用私钥基于公钥/私钥加密创建数据哈希和 MAC(消息验证码)。
哈希仅告诉您数据是否被修改。
MAC使用任何类型的秘密,因此它也可以防止操纵。通常,MAC 仅在发送方和接收方相互认识时才起作用。
您可以执行以下操作:
public string SignData(string message, string secret)
{
var encoding = new System.Text.UTF8Encoding();
var keyBytes = encoding.GetBytes(secret);
var messageBytes = encoding.GetBytes(message);
using (var hmacsha1 = new HMACSHA1(keyBytes))
{
var hashMessage = hmacsha1.ComputeHash(messageBytes);
return Convert.ToBase64String(hashMessage);
}
}
推荐阅读
- python - 我可以在 `np.linspace` 中插入“0”吗?
- javascript - Chrome 上的硬刷新
- reactjs - 尝试从 ConsenSys 安装 Rimble 但遇到错误。“无法解决依赖关系:react@”^16.9.0,来自 rimble-ui@0.14.0“我该怎么办?
- javascript - 当通过 AJAX 向 FLASK API 发出 POST 请求时,页面会无限次重新加载
- java - 在 ViewPager 中实现按钮不起作用
- python - 如何替换字典所有键中的子字符串
- html - 行反向 flexbox 在移动设备上不能很好地对齐
- javascript - 反应原生 0.63.3 | 使用 chrome 调试器时 setInterval 不起作用
- c# - 我正在尝试找到一种更好的方法来查找数组中第 n 个最稀有的元素
- excel - 遍历 5 个名称并在 MS EXCEL 中的单独工作表中获取结果