是否可以从字符串生成RSA密钥



我使用node rsa包使用rsa函数进行非对称加密。

目前,我正在生成我的公钥和私钥,如下所示:

generateKeys = function() {
const key = new NodeRSA({ b: 1024 });
return {
public: key.exportKey('public'),
private: key.exportKey('private'),
}
}

有没有任何可能的方法从给定的字符串生成密钥?我想这样做,这样我的用户就可以很容易地写下他们的私钥,这对我的项目很重要。毕竟,写下1024个字符长的私钥几乎是不可能的。

我希望有这样的东西:

const key = new NodeRSA({ b: 1024 }, "Secret goes here")

我认为这是可能的,因为sha256函数可以接受任何要散列的字符串。我知道RSA加密并不是一个真正的散列函数,所以我不确定是否也可能产生同样的效果。

感谢您的帮助!

似乎有一种简单的方法可以做到这一点。有一个包叫cryptico可以做到这一点。

首先安装包:

npm i cryptico

示例

const cryptico = require('cryptico');
const PassPhrase = "The Moon is a Harsh Mistress."; 
// The length of the RSA key, in bits.
const Bits = 1024; 
const RSAkey = cryptico.generateRSAKey(PassPhrase, Bits);
const PublicKeyString = cryptico.publicKeyString(RSAkey); 

一个更好和完整的例子可以在这里找到

更新

因此,如果您需要ASYMMETRIC加密(正如我所知,它与一对称为publickeyprivatekey的密钥一起使用(,您可以简单地使用纯Node.js实现。

示例

const { generateKeyPairSync, publicEncrypt, privateDecrypt } = require('crypto');
const PassPhrase = "The Moon is a Harsh Mistress.";
const Bits = 1024;
const encryptWithRSA = (input, publickey) => {
const buffer = Buffer.from(input, 'utf-8');
const encrypted = publicEncrypt(publicKey, buffer);
return encrypted.toString("base64");
}
const decryptWithRSA = function (input, privatekey) {
const buffer = Buffer.from(input, 'base64');
const decrypted = privateDecrypt(
{
key: privatekey,
passphrase: PassPhrase,
},
buffer,
)
return decrypted.toString("utf8");
};
const { privateKey, publicKey } = generateKeyPairSync('rsa', {
modulusLength: Bits,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: PassPhrase
}
});
const encrypted = encryptWithRSA('yes i know', publicKey)
console.log(encrypted);
console.log(decryptWithRSA(encrypted, privateKey));

输出(如您所知,encrypted值是随机的(

t3Gw+PlKn84gx2wkj99we345C6ZjIElpgDkzXjio2aWRwI28qTMev14H7o219P6Lw9STGnfK4FgTYO/cvLGlzplqRv6X5AgrstwsGQN88wmKHe5+6cxlpzPFNPWLUqtAvsIOPZe+ghaRGCkOT2ETUp4PiqwOTJ2EtmyVqQHt+f4=
yes i know

最新更新