基于密码在javascript中生成RSA密钥对

时间:2012-06-22 12:35:10

标签: javascript security cryptography rsa key-generator

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

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

或者更确切地说是哈希,例如sha512(sha512(密码+盐)+密码+胡椒)

这需要在JavaScript中以客户端方式完成。

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

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


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

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

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

4 个答案:

答案 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)

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

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

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