首页 > 解决方案 > JS Bcrypt 到 c#

问题描述

我正在尝试将https://github.com/tutao/tutanota/blob/master/src/api/worker/crypto/Bcrypt.js转换为 c#。

如果我是正确的,generateKeyFromPassphrase 的输入如下:

最后返回一个字符串:

我在 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# 新手)。

有人可以指出我正确的方向吗?

提前致谢。

标签: javascriptc#

解决方案


推荐阅读