RSA非対称暗号化、フロントエンドJS暗号化、バックエンドPHP復号
4136 ワード
注意:
秘密鍵がPHP変数に直接書かれている場合は、絶対にインデントできないので、コピーしてどうすればいいか(公開鍵秘密鍵をテキストに入れてphpで取得したほうがいい)
RSA公開鍵/秘密鍵のオンライン生成:http://web.chacuo.net/netrsakeypair
以上のURLから公開鍵/秘密鍵ペアを生成し、秘密鍵フォーマットはここで【PKCS#1】を選択します.
公開鍵
秘密鍵
jsencrypt.js
フロントエンドJSクラスライブラリ使用:jsencrypt.js
プロジェクトのアドレス:https://github.com/travist/jsencrypt
このアイテムをダウンロードし、フロントエンドページでjsライブラリを参照すればいいです.
フォームの に を するフロントエンド
バックエンドの
フロントエンドJS 、
バックエンドPHP 、
jsencrypt.jsは ペアを する:
秘密鍵がPHP変数に直接書かれている場合は、絶対にインデントできないので、コピーしてどうすればいいか(公開鍵秘密鍵をテキストに入れてphpで取得したほうがいい)
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();