パブリックでテキストを暗号化するために2つのキー(プライベートとパブリック)を生成し、そのプライベートキーを使用してテキストを復号化する必要があります。Node.js暗号を使用して秘密/公開鍵ペアを作成する方法は?
モジュールCryptoで可能ですか?
ありがとうございました!
パブリックでテキストを暗号化するために2つのキー(プライベートとパブリック)を生成し、そのプライベートキーを使用してテキストを復号化する必要があります。Node.js暗号を使用して秘密/公開鍵ペアを作成する方法は?
モジュールCryptoで可能ですか?
ありがとうございました!
私はそれを使用していないが、これは有用である可能性がある:
http://ox.no/posts/diffie-hellman-support-in-node-js
ドキュメントが厳しく、この上で(私は見つけることができる何の例)が欠如していません。
あなたがOpenSSLから望むものを得る方法を知っていれば、ノードのchild_process
を使ってOpenSSLを実行するのが完全に合理的だと思います。
var cp = require('child_process')
, assert = require('assert')
;
var privateKey, publicKey;
publicKey = '';
cp.exec('openssl genrsa 2048', function(err, stdout, stderr) {
assert.ok(!err);
privateKey = stdout;
console.log(privateKey);
makepub = cp.spawn('openssl', ['rsa', '-pubout']);
makepub.on('exit', function(code) {
assert.equal(code, 0);
console.log(publicKey);
});
makepub.stdout.on('data', function(data) {
publicKey += data;
});
makepub.stdout.setEncoding('ascii');
makepub.stdin.write(privateKey);
makepub.stdin.end();
});
this rsa-json moduleを使用できます。それは単にopensslプロセスを生成するので、OSにかなり依存しています(Windowsではデフォルトでは機能しません)。
'keypair'はOpenSSLよりもはるかに遅く、また同期していますが、OpenSSLルートは非同期です。 child_processルートは_more_スケーラブルです。 –
は、鍵ペアを生成するために、NPMから暗号モジュールを使用してください。
var crypto = require('crypto');
var prime_length = 60;
var diffHell = crypto.createDiffieHellman(prime_length);
diffHell.generateKeys('base64');
console.log("Public Key : " ,diffHell.getPublicKey('base64'));
console.log("Private Key : " ,diffHell.getPrivateKey('base64'));
console.log("Public Key : " ,diffHell.getPublicKey('hex'));
console.log("Private Key : " ,diffHell.getPrivateKey('hex'));
上記はスニペットの例です。より多くのチェックアウトのドキュメントを知るにはhttp://nodejs.org/api/crypto.html
次のコードは機能しますが、私はプロの暗号化技術者ではないので、ここでのコメントが役に立ちます。
暗号の代わりにursa RSAモジュールを使用しました。
類似のデータがAESなどのパスを使わずに直接暗号化されている場合、これを破るのは簡単ではないと私は懸念しています。それはすでにURSAのように見えるパディングを行い、いくつかのさらなる調査http://en.wikipedia.org/w/index.php?title=RSA_%28cryptosystem%29§ion=12#Attacks_against_plain_RSA後...
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);
をして下さいコメント。
Chris:コード内のあなたのコメントは、privateで暗号化し、publicで復号化しますが、コードは逆のことを行います:publicで暗号化し、privateで復号化します。プライベートで暗号化しようとすると、pub.decrypt(enc)はpubの解読関数が定義されていないことを伝えます。何かご意見は。 Thx – HarleyDave
ursaライブラリは少し放棄されているようです。 – Pablo
ユーザーに秘密鍵を安全に与える方法がわかりません。彼らがローカルで鍵ペアを生成して公開鍵を与えた方が良いでしょう。 – Bruno
@Brunoはい、問題はありません...私の目標は、Node.jsで鍵(プライベート、パブリック)のペアを作成する方法を理解することです。これは可能ですか? – Dail