JSとPHPが通じるRSAの復号化
引用する
より安全にパスワードを転送するために、RSAを採用し、フロントエンドでJSで公開鍵で暗号化し、サーバはPHPで秘密鍵で復号することにしました.
PHP端子はopensslのRSAを使って復号することができ、すでに非常に成熟している.主な問題は、JS側でもRSAの復号化はできますが、面倒なようです.
ネットでBarrett.を見つけたjs+BigInt.js+RSA.jsの組合せ、base 64.js+rsa.js+rng.js+prng4.js+jsbn.jsの組み合わせは、使えますが、その中に使われている16進鍵は、使いにくいです.
最終的にjsencryptを見つけた.js、opensslのようなスタイルで、完璧に解決します!
jsencrypt.js
プロジェクトの説明:
A Javascript library to perform OpenSSL RSA Encryption, Decryption, and Key Generation.
プロジェクトのアドレス:
https://github.com/travist/jsencrypt
使用時はjsencryptのみです.jsは1つのファイルで、とてもさわやかです!プロジェクトにはsampleが付いていて、PHPとの相互接続性をテストするために、元の基礎の上で変更しました.
インスタンスリンクのテストhttp://download.csdn.net/detail/bhzsisui/9063957.
復号化テスト
demo.htmlのコード:
テストにより、PHPとJSを簡単に連携させ、公開鍵の暗号化と秘密鍵の復号化を実現することができる.
JS側は116文字以上の復号化で限界を超えたが,パスワードには十分である.
また、jsencrypt.jsはまた、鍵ペアを生成することもできる.
より安全にパスワードを転送するために、RSAを採用し、フロントエンドでJSで公開鍵で暗号化し、サーバはPHPで秘密鍵で復号することにしました.
PHP端子はopensslのRSAを使って復号することができ、すでに非常に成熟している.主な問題は、JS側でもRSAの復号化はできますが、面倒なようです.
ネットでBarrett.を見つけたjs+BigInt.js+RSA.jsの組合せ、base 64.js+rsa.js+rng.js+prng4.js+jsbn.jsの組み合わせは、使えますが、その中に使われている16進鍵は、使いにくいです.
最終的にjsencryptを見つけた.js、opensslのようなスタイルで、完璧に解決します!
jsencrypt.js
プロジェクトの説明:
A Javascript library to perform OpenSSL RSA Encryption, Decryption, and Key Generation.
プロジェクトのアドレス:
https://github.com/travist/jsencrypt
使用時はjsencryptのみです.jsは1つのファイルで、とてもさわやかです!プロジェクトにはsampleが付いていて、PHPとの相互接続性をテストするために、元の基礎の上で変更しました.
インスタンスリンクのテストhttp://download.csdn.net/detail/bhzsisui/9063957.
復号化テスト
demo.htmlのコード:
JSEncrypt Example
function do_encrypt() {
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());
var encrypted = encrypt.encrypt($('#input').val());
// Decrypt with the private key...
var decrypt = new JSEncrypt();
decrypt.setPrivateKey($('#privkey').val());
var uncrypted = decrypt.decrypt(encrypted);
var $bstr1=decrypt.encrypt($('#input').val());
var $bstr2=encrypt.decrypt($bstr1);
// Now a simple check to see if the round-trip worked.
if (uncrypted == $('#input').val()) {
$('#pubkeyencode').val(encrypted);
$('#privkeydecode').val(uncrypted);
$('#privkeyencode').val($bstr1);
$('#pubkeydecode').val($bstr2);
}
else {
alert('Something went wrong....');
}
}
";
echo "private key encrypt by PHP:"."
";
echo $encrypted."
";
echo "public key decrypt by PHP:"."
";
echo $decrypted."
";
echo "---------------------------------------"."
";
echo "public key encrypt by PHP:"."
";
echo $encrypted2."
";
echo "private key decrypt by PHP:"."
";
echo $decrypted2."
";
echo "private key decrypt by JS:"."
";
?>
テストにより、PHPとJSを簡単に連携させ、公開鍵の暗号化と秘密鍵の復号化を実現することができる.
JS側は116文字以上の復号化で限界を超えたが,パスワードには十分である.
また、jsencrypt.jsはまた、鍵ペアを生成することもできる.
var crypt = new JSEncrypt({default_key_size: 1024});
crypt.getKey();
crypt.getPrivateKey();
crypt.getPublicKey();