RSA非対称暗号化、フロントエンドJS暗号化、バックエンドPHP復号

4136 ワード

注意:
秘密鍵がPHP変数に直接書かれている場合は、絶対にインデントできないので、コピーしてどうすればいいか(公開鍵秘密鍵をテキストに入れてphpで取得したほうがいい)
RSA非对称加密,前端JS加密,后端PHP解密_第1张图片
RSA公開鍵/秘密鍵のオンライン生成:http://web.chacuo.net/netrsakeypair
以上のURLから公開鍵/秘密鍵ペアを生成し、秘密鍵フォーマットはここで【PKCS#1】を選択します.
公開鍵
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN3El4yr2maFvDo5PKIzkkiitJ
ZEOTLNINH0RD0PL5Lob+YzbRJO6DX27SRuHcdlK7mFtkQvooW/oslsNxfpy/55WO
Rd4EcWoPG03oraX4pw3Yokw1XcMsfVv1exvcf0kaVKSThmJaN3KrgE4B+Ht2jRJ1
deHi3FFuPa6wJs0OoQIDAQAB
-----END PUBLIC KEY-----

秘密鍵
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDN3El4yr2maFvDo5PKIzkkiitJZEOTLNINH0RD0PL5Lob+YzbR
JO6DX27SRuHcdlK7mFtkQvooW/oslsNxfpy/55WORd4EcWoPG03oraX4pw3Yokw1
XcMsfVv1exvcf0kaVKSThmJaN3KrgE4B+Ht2jRJ1deHi3FFuPa6wJs0OoQIDAQAB
AoGABGAAFaPRZ4cPA3AC3VkKYpFqTmDyB0c5q5e5Ct+7bH1WaWc+e4U111ECVI09
MKSaisFu4bPkyvBoVc0FHmqa3eSQz9uRPCn3A9WsQRBaZtsXMJ3/iG6Lt7kwzZiY
olD25+wQb3OZvlLmoX1iU6Ihv0EnCGP47pUUB0PhM+8a+fECQQDRehgyB0oN2gZS
EXN1tJ3wDzHdddV1588T+LJEKYn426BzLMKMNYfg2vnZh6X00IkX4tdS8Lqe8sP0
P9toHJilAkEA+5SUEoj+nMeJDJQeP2tXqEGHrkE5Xys74WRTZzw3vxXHr8ao5Ktl
UDGw904CnsULOcqsHzcpiICR/U5FbaiBTQJAZoCtOEXS2eZW82+wpOdF5YM57llL
o89TyD0I1kvRROILqHA9nqhPHhto6SX0clBc1UBeByre1wqKEonwzgg4NQJBAPix
koKUHCW9dfQSQ6hro1Z3mPmgDmfOpD4V4ACwXWcuz5wqZPDPobJZvNdrrVln7cXu
XKHq9Mq0VhyyEB3rsg0CQCa15dER0X/RLYrnyU3A3KmJLOlCz6Y6DFI0NtQKnp1K
ujDkIs6RM+4ZYGi+8esm7ubcdpvdTUSnBlkyZu2jJ2k=
-----END RSA PRIVATE KEY-----

jsencrypt.js
フロントエンドJSクラスライブラリ使用:jsencrypt.js
プロジェクトのアドレス:https://github.com/travist/jsencrypt
このアイテムをダウンロードし、フロントエンドページでjsライブラリを参照すればいいです.

フォームの に を するフロントエンド
var password = $("#password").val();
var encrypt = new JSEncrypt();
encrypt.setPublicKey('      ');
var encrypted = encrypt.encrypt(password);
$("#password").val(encrypted);

バックエンドの
$password = $_POST['password'];//    
$private_key = "      ";
$pi_key =  openssl_pkey_get_private($private_key);
$decrypted = "";//             
openssl_private_decrypt(base64_decode($password),$decrypted,$pi_key);//    base64_decode                          base64_encode
$password = $decrypted;//      

フロントエンドJS 、
var data = 'testData';

//    
var encrypt = new JSEncrypt();
encrypt.setPublicKey('      ');
var data_encrypted = encrypt.encrypt(data);
 
//        
var decrypt = new JSEncrypt();
decrypt.setPrivateKey('      ');
var data_decrypted = decrypt.decrypt(data_encrypted);

if (data == data_decrypted) {
    console.log('  、    ');
}

バックエンドPHP 、
$pi_key =  openssl_pkey_get_private('      ');//                 ,      id Resource id
$pu_key = openssl_pkey_get_public('      ');//                 
 
$data = "testData";//    
$data_encrypted = "";//      
$data_decrypted = "";//      

//    
openssl_private_encrypt($data, $data_encrypted, $pi_key);
$data_encrypted = base64_encode($data_encrypted);//              ,       ,      url      base64     url   
//    
openssl_public_decrypt(base64_decode($data_encrypted), $data_decrypted, $pu_key);//                 

echo $data.'
'; echo $data_encrypted.'
'; echo $data_decrypted.'
'; $data_encrypted2 = "";// $data_decrypted2 = "";// // openssl_public_encrypt($data, $data_encrypted2, $pu_key); $data_encrypted2 = base64_encode($data_encrypted2); openssl_private_decrypt(base64_decode($data_encrypted2), $data_decrypted2, $pi_key); echo $data.'
'; echo $data_encrypted2.'
'; echo $data_decrypted2.'
';

jsencrypt.jsは ペアを する:
var crypt = new JSEncrypt({default_key_size: 1024});
crypt.getKey();
crypt.getPrivateKey();
crypt.getPublicKey();