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のコード:


  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();