NodeJS,RSA,这是安全的?

这是一个用公钥encryption并用私钥解密的安全方式吗?

如果不是,我需要添加什么? AES或类似的通过?

var ursa = require('ursa'); var fs = require('fs'); // create a pair of keys (a private key contains both keys...) var keys = ursa.generatePrivateKey(); console.log('keys:', keys); // reconstitute the private key from a base64 encoding var privPem = keys.toPrivatePem('base64'); console.log('privPem:', privPem); var priv = ursa.createPrivateKey(privPem, '', 'base64'); // make a public key, to be used for encryption var pubPem = keys.toPublicPem('base64'); console.log('pubPem:', pubPem); var pub = ursa.createPublicKey(pubPem, 'base64'); // encrypt, with the public key, then decrypt with the private var data = new Buffer('hello world'); console.log('data:', data); var enc = pub.encrypt(data); console.log('enc:', enc); var unenc = priv.decrypt(enc); console.log('unenc:', unenc); 

它看起来很安全,但如果你想encryptionstring,你通常应该使用混合encryption。 在这种情况下,你应该确实使用AES。 如果你使用AES,那么使用某种types的消息authentication也是非常明智的,特别是如果可以使用填充的话。

代码中完全缺less的东西当然是一种信任公钥的方法。 您在代码中生成密钥对,但这是不应该经常执行的。 密钥pipe理是密码学中最重要的部分之一。

此外,这个图书馆看起来像一个人的表演。 即使SLaks有贡献,你应该对这些项目非常谨慎。 例如,SJCL库有一些巨大的漏洞,并且在RNCrypt中也发现了一些严重的问题。 而且,这些项目很容易就没有维护人员了。

图书馆的文档也相当稀less。 例如,我假设generatePrivateKey()默认创build一个大小为2048的密钥 ,但是除了代码审查或(实际上)testing输出之外,没有办法检查这个密钥 。 我不认为它默认为512位,但只是API文档,我不能确定。