javascript - JS Bcrypt 到 c#
问题描述
我正在尝试将https://github.com/tutao/tutanota/blob/master/src/api/worker/crypto/Bcrypt.js转换为 c#。
如果我是正确的,generateKeyFromPassphrase 的输入如下:
- 密码 = SHA256 字符串
- salt = Rand 16 字节字符串
最后返回一个字符串:
- Bcrypt 密码+盐 8 次迭代
我在 c# 中构建了以下函数
public static string ComputeSha256Hash(string rawData)
{
// Create a SHA256
using (SHA256 sha256Hash = SHA256.Create())
{
// ComputeHash - returns byte array
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));
// Convert byte array to a string
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
public static string CreateHash(string passphrase, string saltInput)
{
// Generate a salt
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
byte[] salt = StringToByteArray(saltInput);
provider.GetBytes(salt);
// Generate the hash
Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(passphrase, salt, 8);
byte[] bytes = pbkdf2.GetBytes(256);
return Encoding.UTF8.GetString(bytes, 0, bytes.Length);
}
public static byte[] StringToByteArray(string str)
{
byte[] array = Convert.FromBase64String(str);
return array;
}
但是我的编码不起作用,但我不完全理解为什么(我是 c# 新手)。
有人可以指出我正确的方向吗?
提前致谢。
解决方案
推荐阅读
- gulp - 试图用 elixir 和 gulp 来编译 sass 但是当我在终端中尝试 gup 时,得到这个错误:
- c - 为什么在函数 bloc 中定义枚举可能是一种不好的做法?
- excel - 如何在 VBA 中仅使用后期绑定来向下转换对象?
- .net - WinForm 控件上的 .NET Focus() 使滚动条向下移动
- java - How to order a Public and Private Vlan using Softlayer API
- wso2-am - What is the HTTP return code in case of APIM throttling?
- python - 如何通过 Selenium 快速获取网页上所有元素的大小和位置
- reactjs - 无法点击我放在 Forge 查看器上的 POI
- python - Find the distance between points and line and achieve the projection distance that the point takes in a line
- node.js - 我想在 HTML 页面上使用带有 requireJS 的节点中的“fs”