14

据我了解,RSA 密钥通常是基于(强)随机生成器生成的。

相反,我想根据密码创建它们。

或者更确切地说,在它的哈希上,例如 sha512(sha512(password+salt)+password+pepper)

这需要在客户端用 JavaScript 完成。

有人知道该怎么做吗?是否有一个简单的 JavaScript 库可以根据给定的输入确定性地创建 RSA 密钥对?

(实际上,我提到了 RSA,但任何安全的非对称加密就足够了,我只需要公私加密)


另外:我需要这个,因为我正在构建一些安全的通信解决方案,不需要依赖连接甚至服务器来保证安全。

我正在使用随机密钥使用 AES 加密所有内容,并且密钥是 RSA 加密的。这个想法是 Alice 可以用 Bob 的公钥对她的内容(或者实际上是她的内容的 AES 密钥)进行 RSA 加密(因此 Bob 的公钥必须在线存储)。

稍后,当 Bob 再次输入他的密码时,他的浏览器可以确定性地当场计算他的 RSA 私钥和公钥,从 Alice 那里下载内容,并使用他的私钥在本地解密。

4

4 回答 4

11

当您将密码作为 RNG 的种子时,看起来Cryptico可以帮助您。

于 2012-06-23T12:03:31.267 回答
5

2020 年浏览器/客户端年度答案:

如果您想在客户端使用 TypeScript 的 RSA 加密(例如在浏览器或 Ionic 混合应用程序中),请执行以下操作:

  • npm i cryptico-js --save
  • 在您的 TypeScript (v3.4+) 代码中使用下一个导入:import * as cryptico from 'cryptico-js/dist/cryptico.browser.js';
  • 之后,您可以使用cryptico此处描述的所有方法:https ://www.npmjs.com/package/cryptico
于 2020-06-23T13:16:33.027 回答
3

我无法评论我的标点符号,但除了他所说的 +Eugene_Mayevski_'EldoS

对于纯 JavaScript: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);
于 2015-02-08T00:45:36.433 回答
2

RSA 密钥不只是像大多数对称算法那样的随机位,它们是从大素数派生的指数和模数。因此,我看不出有任何合理的方式可以从密码中生成它们。请参阅此维基百科文章

你用这些密钥对做什么?为什么它们必须从密码派生?如果您想使用密码来加密某些东西,您可以使用 SHA256(密码)来派生 AES256 密钥。(如果你打算这样做,请务必阅读关键强化)。

于 2012-06-22T15:06:59.000 回答