我可以使用以下内容创建HMAC:
var encrypt = crypto.createHmac("SHA256", secret).update(string).digest('base64');我正在尝试使用以下密钥解密已编码的HMAC:
var decrypt = crypto.createDecipher("SHA256", secret).update(string).final("ascii");以下操作未成功。如何使用密钥解密HMAC?
我得到以下错误:
node-crypto : Unknown cipher SHA256
crypto.js:155
return (new Decipher).init(cipher, password);
^
Error: DecipherInit error发布于 2013-01-08 23:57:38
HMAC是MAC/密钥哈希,而不是密码。它不是用来解密的。如果您想要加密某些内容,请使用密码,如AES,最好是在验证模式下,如AES-GCM。
“解密”的唯一方法是猜测整个输入,然后比较输出。
发布于 2015-08-25 19:19:46
再次重申,哈希不是用来解密的。然而,一旦你有了一个散列,你就可以通过用相同的秘密对它进行相同的加密,来检查任何字符串是否等于那个散列。
var crypto = require('crypto')
var secret = 'alpha'
var string = 'bacon'
var hash = crypto.createHmac('SHA256', secret).update(string).digest('base64');
// => 'IbNSH3Lc5ffMHo/wnQuiOD4C0mx5FqDmVMQaAMKFgaQ='
if (hash === crypto.createHmac('SHA256', secret).update(string).digest('base64')) {
console.log('match') // logs => 'match'
} else {
console.log('no match')
}看起来很明显,但却非常强大。
发布于 2013-01-09 00:21:13
正如CodesInChaos已经指出的,带有SHA256的HMAC只能用于散列值,这只能是单向的。如果您希望能够加密/解密,则必须使用密码,例如aes或des。
加密/解密示例:
const crypto = require("crypto");
// key and iv
var key = crypto.createHash("sha256").update("OMGCAT!", "ascii").digest();
var iv = "1234567890123456";
// this is the string we want to encrypt/decrypt
var secret = "ermagherd";
console.log("Initial: %s", secret);
// create a aes256 cipher based on our password
var cipher = crypto.createCipheriv("aes-256-cbc", key, iv);
// update the cipher with our secret string
cipher.update(secret, "ascii");
// save the encryption as base64-encoded
var encrypted = cipher.final("base64");
console.log("Encrypted: %s", encrypted);
// create a aes267 decipher based on our password
var decipher = crypto.createDecipheriv("aes-256-cbc", key, iv);
// update the decipher with our encrypted string
decipher.update(encrypted, "base64");
console.log("Decrypted: %s", decipher.final("ascii"));注意:你必须将加密/解密保存到自己的变量中,并且还要确保在.update__之后不要链接.final。
如果您想知道您的系统上有哪些密码,请使用以下命令:
openssl list-cipher-algorithmhttps://stackoverflow.com/questions/14218925
复制相似问题