解密在节点js中形成身份验证令牌(AES,SHA1)

时间:2014-03-07 18:49:32

标签: c# asp.net node.js authentication cryptography

有没有人有幸使用加密库在节点js中解密.NET表单身份验证生成的cookie?

我使用AES进行加密,使用SHA1进行.NET表单身份验证机制验证。

我想知道是否有人之前有这个问题并解决了它?

2 个答案:

答案 0 :(得分:0)

我玩了这个并为Node.js制作了以下代码:

var crypto = require('crypto');
var iconv = require('iconv-lite');

function hash(password) {
  // your validation key from web.config + 00 at the end
  var buf = new Buffer('...00', 'hex');
  var hmac = crypto.createHmac('sha1', buf);
  // convert password from utf8 to UTF16
  var pass = iconv.encode(password, 'utf16le');
  hmac.update(pass);
  return hmac.digest('base64');
}

console.log(hash('test'));

用它来比较数据库中的哈希值。

答案 1 :(得分:0)

这取决于web.config设置。

您可以在此处看到Encryp和Decrypt的源代码,其中包含所有不同的可能性(Framework20SP1,Framework20SP2等)

https://github.com/Microsoft/referencesource/blob/master/System.Web/Security/FormsAuthentication.cs

例如,在Framework20SP1上,cookie看起来像:Enc(IV + SerializedTicket + Modifier)+ HMAC(Enc(IV + SerializedTicket + Modifier))