我看到了如何使用Crypto和jsonwebtoken库在NodeJS中创建HMAC 256加密的JWT。很简单
//encrypt & sign with HS256
const jwt = require('jsonwebtoken');
const pass = crypto.randomBytes(256).toString('hex');
const A = {algorithm:'HS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);
//decrypt & verify
jwt.verify(token, pass, A, function(err, decoded)
{
console.log('decode ',decoded);
console.log('err ',err);
res.send({error:err, text:decoded});
});
我想将'pass'替换为'RSA 256 SHA',将A替换为{algorithm:'RS256'}
在node crypto JS的文档中,我看到了命令
const sign = crypto.createSign('RSA-SHA256');
但是文档具有功能
getPrivateKeySomehow()
未定义或为crypto.getPrivateKeySomehow()的一部分
所以我想我只需要帮助就可以从加密返回RSA-SHA-256字符串,以便可以将其传递到jsonwebtoken中以对我的JWT进行签名。
注意: 我不想从服务器上的静态文件中读取一个private.key,因为我也看到所有用户也拥有一个私有密钥很大的安全隐患,因此为什么我要生成自己的256字节密码并将其存储在非现场(本文中未提供)
另外,我不确定是否应该执行这样的操作(是否不从命令行使用类似openssl的内容?)
const begin = '-----BEGIN RSA PRIVATE KEY-----\n';
const enc = crypto.randomBytes(256).toString('base64') + '\n';
const end = '-----END RSA PRIVATE KEY-----'
const pass = sign.sign(begin + enc + end);
const A = {algorithm:'RS256'};
const token = jwt.sign({ foo: 'bar' }, pass, A);
答案 0 :(得分:1)
看看下面这个例子:
signExample = (str) => {
crypto.generateKeyPair('rsa', {
modulusLength: 1024,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
}, (err, publicKey, privateKey) => {
// sign String
var signerObject = crypto.createSign("RSA-SHA256");
signerObject.update(str);
var signature = signerObject.sign({key:privateKey,padding:crypto.constants.RSA_PKCS1_PSS_PADDING}, "base64");
console.info("signature: %s", signature);
//verify String
var verifierObject = crypto.createVerify("RSA-SHA256");
verifierObject.update(str);
var verified = verifierObject.verify({key:publicKey, padding:crypto.constants.RSA_PKCS1_PSS_PADDING}, signature, "base64");
console.info("is signature ok?: %s", verified);
});
}
步骤: