【问题标题】:Decrypt passwords from asp.net membership framework in nodejs从 nodejs 中的 asp.net 成员资格框架解密密码
【发布时间】:2017-03-31 01:17:38
【问题描述】:

我正在尝试从 node.js 应用程序中的成员框架解密密码。

当我从会员框架User.GetPassword() 获得明文版本时,它们能够被解密。

我尝试了以下方法,但这不起作用:

let encryptedPassword = 'LqOz9My...';
let passwordSalt = 'JQ2...';
let validationKey = '0123456789ABCEF';
let decryptionKey = '0123456789ABCEF';
var algorithm = 'aes128';

var decipher = crypto.createDecipher(algorithm, decryptionKey);
var decryptedPassword = decipher.update(encryptedPassword, 'utf8', 'utf8') + decipher.final('utf8');

【问题讨论】:

  • 您只是在加密密码? >
  • “它不起作用”是什么意思?这意味着您在会员表中获取加密密码,通过解密运行它,然后将其与 User.GetPassword() 进行比较?
  • @Kritner - 完全正确。我知道密码的纯文本版本应该是什么。我认为需要以某种方式使用盐。我试过 crypto.createDecipheriv,但我的盐长度似乎无效

标签: asp.net node.js encryption cryptography asp.net-membership


【解决方案1】:

解决办法如下:

let salt = '<my base64 salt>';
let saltBuffer = Buffer.from(salt, 'base64'); // 16 bytes
let decryptionKey = '<my hex decryption key>';
let decryptionKeyBuffer = Buffer.from(decryptionKey, 'hex');  // 24 bytes
var algorithm = 'aes192';
let encryptedPassword = '<my base64 encoded, encrypted string>';

var decipher = crypto.createDecipheriv(algorithm, decryptionKeyBuffer, saltBuffer);
decipher.setAutoPadding(false);
var dec = decipher.update(encryptedPassword, 'base64', 'utf8');
dec += decipher.final('utf8');
console.log(dec);

问题是我使用了错误的编码和错误的加密。以下是我的想法。

加密

您可以通过解密密钥的长度轻松确定加密算法类型。就我而言,一旦我将密钥转换为 Buffer,长度为 24,因为 24 * 8 = 192,我的算法是 aes192

编码

在我的原始示例中,我将加密密码的编码设置为utf8。编码实际上是base64。除了尝试各种接受的参数之外,不确定如何确定这一点。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 2011-11-21
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多