C#和JavaScript之间的pbkdf2计算不一致 - c#

嗨,我的问题是我已经在Windows Azure服务器端Javascript上使用crypto.pbkdf2加密了密码,我很确定有一个可以查询的公共库。问题是我正在尝试在系统上的C#中加密相同的密码,因为我希望凭据是通用的,但是尽管使用Rfc2898DeriveBytes,并且盐第一次生成却无法返回相同的哈希密码。

谢谢您的帮助 :)

function hash(text, salt, callback) {
  crypto.pbkdf2(text, salt, iterations, bytes, function(err, derivedKey){
    if (err) { callback(err); }
    else {
      var h = new Buffer(derivedKey).toString('base64');
      callback(null, h);
    }
  });
}

和C#代码:

byte[] salt = Convert.FromBase64String(user.salt);
using (var deriveBytes = new System.Security.Cryptography.Rfc2898DeriveBytes(password, salt, 1000))
{
  byte[] newKey = deriveBytes.GetBytes(32);

  // user is the user object drawn from the database in existence
  if (Convert.ToBase64String(newKey).Equals(user.password))
  {
    FormsAuthentication.RedirectFromLoginPage(Request.Form["username"], false);
  }
}

C#生成的十六进制= 3lRSQF5ImYlQg20CGFy2iGUpWfdP5TD0eq2cTHhLono =

JS生成的十六进制= w4PDh8K6YMKGwr3DgcObRsOsFFUgDMOJw5PCnkdAwrTCgcOOV8OCKMKFdcKRwrLCqMK2VA ==

由JS生成并在两个位置都使用的盐= / Ij0hgDsvAC1DevM7xkdGUVlozdCxXVd0lgfK2xEh2A =

以上所有信息均为base64格式

另一件事可能有用

item.salt = new Buffer(crypto.randomBytes(bytes)).toString('base64'); crypto.pbkdf2(text, salt, iterations, bytes, function(err, derivedKey){

这意味着JS函数接受一个字符串

c#参考方案

我希望凭据是通用的,但是尽管使用了Rfc2898DeriveBytes并且盐第一次生成了,但我仍无法返回相同的哈希密码。

显而易见的东西是哈希算法,盐和迭代计数。您可以确认(两种语言):

哈希算法

迭代次数

不明显的是密码的编码,也可能是盐。我加入了盐,因为它通常以字符串形式存储。

为了使它在不同语言之间具有可移植性,应使用UTF-8。这是因为您可能会遇到默认编码,UTF16-BE,UTF16-LE或任何其他数量的编码。

在C#中,设置为:

byte[] utf8_salt = Encoding.UTF8.GetBytes(salt);
byte[] utf8_pass = Encoding.UTF8.GetBytes(password);

然后,您可以将utf8_saltutf8_pass传递给PBKDF2函数。

我不知道如何在Javascript中执行相同的操作。

提交初始化后删除某些帖子数据 - javascript

在初始化提交之后但在将数据发送到处理页面之前,是否可以过滤$ _POST表单数据?我想象过程的方式:提交->收集$ _POST数据->发送数据我想做的事:提交->收集$ _POST数据->删除某些元素->发送数据这样就不必更改处理页面以过滤掉不希望接收的元素了吗? javascript大神给出的解决方案 当然可以,您可以在JS …

写一行到javascript文件 - javascript

我正在使用数组来显示网站中的一些图像:var paintingImages; paintingImages = [ { url: 'images/objects/ron.jpg', alt: 'ron' } ]; 该js代码写在paintings.js中,我的主要js代码写在main.js文件中我已经为艺术家制作了这个…

在JavaScript中运行方法C# - javascript

打扰一下,我有这种C#asp方法。受保护的无效btnSave_Click(对象发送者,EventArgs e)有谁知道我该如何发送脚本给您?可以办到?。 javascript大神给出的解决方案 是的,那可以做到。为此,您在.aspx.cs页中创建了函数,然后单击保存按钮上的代码将其复制到函数中,然后执行以下步骤。//Call cs method from J…

如何从客户端将数据插入数据库? - javascript

我是Web开发的初学者,可以访问cpanel上托管的网站,并且需要对其进行一些更改。这个网站的后端是由蛋糕PHP制作的,我想使用ajax从客户端将一些数据插入其数据库。问题是我不知道如何获取负责插入数据库的PHP文件的URL。参见下面的代码:var xhttp = newXMLHttpRequest(); xhttp.onreadystatechange= …

跨python套接字将JSON传递给Javascript - javascript

我正在使用python套接字与JavaScript客户端进行通信。http://docs.python.org/2/library/socket.html然后遵循JavaScript代码的一部分,ws = new WebSocket("ws://localhost:7777/"); ws.onopen = function(){ aler…