从nodejs中的asp.net成员框架解密密码
Decrypt passwords from asp.net membership framework in nodejs
我正在尝试从 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');
解决方法如下:
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
。除了尝试各种接受的参数之外,不确定如何确定这一点。
我正在尝试从 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');
解决方法如下:
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
。除了尝试各种接受的参数之外,不确定如何确定这一点。