据我所知,RSA密钥通常是基于(强)随机生成器生成的。
相反,我想根据密码创建它们。
或者更确切地说是哈希,例如sha512(sha512(密码+盐)+密码+胡椒)
这需要在JavaScript中以客户端方式完成。
有人知道怎么做吗?是否有一个简单的JavaScript库,可以根据给定的输入确定性地创建RSA密钥对?
(实际上,我提到了RSA,但任何安全的非对称加密就足够了,我只需要公私加密)
另外:我需要这个,因为我正在构建一些安全的通信解决方案,不需要依赖连接甚至服务器来保证安全。
我正在使用随机密钥使用AES加密所有内容,并且密钥是RSA加密的。这个想法是Alice可以使用Bob的公钥对其内容(或实际上是她的内容的AES密钥)进行RSA加密(因此Bob的公钥必须在线存储)。
稍后,当Bob再次输入密码时,他的浏览器可以确定地计算他的RSA私密密码。公钥,当场,从Alice下载内容,并使用他的私钥在本地解密。
答案 0 :(得分:9)
当您将密码作为RNG的种子提供时,Cryptico似乎可以为您提供帮助。
答案 1 :(得分:2)
RSA密钥不仅像大多数对称算法一样是随机位,它们是从大素数导出的指数和模数。因此,我没有看到任何合理的方法可以从密码生成它们。见this wikipedia article。
您使用这些密钥对是为了什么?为什么它们必须来自密码?如果要使用密码加密某些内容,可以使用SHA256(密码)来获取AES256密钥。 (如果你打算这样做,请务必阅读key strengthening。)
答案 2 :(得分:2)
我不能评论我的标点符号,但除了他所说的+ Eugene_Mayevski _' EldoS
for javascript pure:https://www.npmjs.com/package/cryptico
对于nodejs:https://www.npmjs.com/package/cryptico您需要:
npm install cryptico
并添加以下行:
var cryptico = require("cryptico");
创建对象:
function cryptoObj(passPhrase)
{
this.bits = 1024; //2048;
this.passPhrase = passPhrase;
this.rsaKey = cryptico.generateRSAKey(this.passPhrase,this.bits);
this.rsaPublicKey = cryptico.publicKeyString(this.rsaKey);
this.encrypt = function(message){
var result = cryptico.encrypt(message,this.rsaPublicKey);
return result.cipher;
};
this.decrypt = function(message){
var result = cryptico.decrypt(message, this.rsaKey);
return result.plaintext;
};
}
console.log('---------------------------------------------------------');
var localEncryptor = new cryptoObj("XXyour secret txt or number hereXX");
var encryptedMessage = localEncryptor.encrypt('new message or json code here');
var decryptedMessage = localEncryptor.decrypt(encryptedMessage);
console.log('');
console.log('>>> Encrypted Message: '+encryptedMessage);
console.log('');
console.log('>>> Decrypted Message: '+decryptedMessage);
答案 3 :(得分:2)
如果要在客户端使用带有TypeScript的RSA加密(例如,在浏览器或带有Ionic的混合应用程序中),请执行以下操作:
npm i cryptico-js
import * as cryptico from 'cryptico-js/dist/cryptico.browser.js';
cryptico
方法:https://www.npmjs.com/package/cryptico