有没有办法从散列密钥秘密创建 AES 密码?
Is there a way to create an AES cipher from a hashed key-secret?
丢失了明文秘密,但有了散列密钥,可以像这样在openssl中加密和解密(密钥和iv不是实际的):
输入:
printf "ciphertext" | base64 -d | openssl enc -aes-256-cbc -d -nosalt -K "0000000000000000000000000000000000000000000000000000000000000000" -iv "00"
输出:
"plaintext"
现在,为了能够在 NodeJs 应用程序中执行此操作,openssl 被称为 child_process。您可以猜到,生成 openssl 调用的性能不是很好。
为了能够在节点加密中做到这一点,在创建密钥时需要明文 "secret"。
有没有办法从散列密钥生成密码?
我试过这样做,但没有成功。
var crypto=require('crypto')
var iv = Buffer.alloc(16, 0);
var key = '0000000000000000000000000000000000000000000000000000000000000000'
var cipher=crypto.createDecipher('aes-256-cbc', newBuffer(key).toString('binary'), new Buffer('0000000000000000', 'hex').toString('binary'));
var enc = cipher.update("ciphertext", 'base64', 'utf8')
enc += cipher.final('utf8')
console.log(enc);
输出:
internal/crypto/cipher.js:164
const ret = this._handle.final();
^
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
尝试
new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
对于密钥和
new Buffer('00000000000000000000000000000000', 'hex')
对于 IV。当前,您正在编码为字节的二进制字符串表示形式,而不是(仅)将十六进制值分别解码为 32 字节和 16 字节。
要使用它,您应该使用 createDecipheriv
,因为 createDecipher
仍会使用密码生成密钥。
丢失了明文秘密,但有了散列密钥,可以像这样在openssl中加密和解密(密钥和iv不是实际的):
输入:
printf "ciphertext" | base64 -d | openssl enc -aes-256-cbc -d -nosalt -K "0000000000000000000000000000000000000000000000000000000000000000" -iv "00"
输出:
"plaintext"
现在,为了能够在 NodeJs 应用程序中执行此操作,openssl 被称为 child_process。您可以猜到,生成 openssl 调用的性能不是很好。
为了能够在节点加密中做到这一点,在创建密钥时需要明文 "secret"。
有没有办法从散列密钥生成密码?
我试过这样做,但没有成功。
var crypto=require('crypto')
var iv = Buffer.alloc(16, 0);
var key = '0000000000000000000000000000000000000000000000000000000000000000'
var cipher=crypto.createDecipher('aes-256-cbc', newBuffer(key).toString('binary'), new Buffer('0000000000000000', 'hex').toString('binary'));
var enc = cipher.update("ciphertext", 'base64', 'utf8')
enc += cipher.final('utf8')
console.log(enc);
输出:
internal/crypto/cipher.js:164
const ret = this._handle.final();
^
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
尝试
new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
对于密钥和
new Buffer('00000000000000000000000000000000', 'hex')
对于 IV。当前,您正在编码为字节的二进制字符串表示形式,而不是(仅)将十六进制值分别解码为 32 字节和 16 字节。
要使用它,您应该使用 createDecipheriv
,因为 createDecipher
仍会使用密码生成密钥。