フロントエンド(JS)とバックエンド(PHP)はRSAで復号化を実現
プロジェクト開発の過程では、セキュリティ上の理由で機密情報を明文で伝達することができず、キャプチャされやすいため、RSAを導入する.
1.公開鍵と秘密鍵の生成は、端末(Unixベースのオペレーティングシステム)に以下の内容を入力する.秘密鍵 を生成する.は、以下のコマンドを実行することにより、公開鍵 を取得する.は、 を表示することができる.フロントエンドコード: バックエンドコード はその後、それに基づいて自分のニーズに応じて関連機能を実現する.Githubアドレス:jsencrypt.min.js
1.公開鍵と秘密鍵の生成
openssl genrsa -out rsa_1024_priv.pem 1024
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
cat
コマンドを使用してcat rsa_1024_priv.pem //
cat rsa_1024_pub.pem //
<script src="http://code.jquery.com/jquery-1.8.3.min.js">script>
<script src="bin/jsencrypt.min.js">script>
<script type="text/javascript">
$(function () {
// ,
var data = 'date';
// ,
var pub_key = '-----BEGIN PUBLIC KEY-----
' +
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFUEBi3D1Q8yFco32wWI/se4lA
' +
'ftsCNi71rgkLNsOhIR3ZOGywKsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1d
' +
'fwdNEZQRHugDiuLIVRdkGWh0loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9Hntl
' +
'tgmIbwW9wMA8U1XP9wIDAQAB
' +
'-----END PUBLIC KEY-----';
// ,
var private_key = '-----BEGIN RSA PRIVATE KEY-----
' +
'MIICXgIBAAKBgQDFUEBi3D1Q8yFco32wWI/se4lAftsCNi71rgkLNsOhIR3ZOGyw
' +
'KsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1dfwdNEZQRHugDiuLIVRdkGWh0
' +
'loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9HntltgmIbwW9wMA8U1XP9wIDAQAB
' +
'AoGBALoZOuEDQIG9DtZFDSLqJLSyv30pKH8pg5kMkFMXT+QFTBW4diqh6fpTUYJ9
' +
'FeAFN41rQRwqXfyLDGptSKWjHQtcBDzpYil+CrFnFFIzADgUtzfKVnfMwgO3X5yx
' +
'j+akB9Pm+er1F9t2qh7OwpbiWXo2ThF5Sfn7PjvdVswmOhsBAkEA7MecQO+PIGzr
' +
'wwwRLadSyT+fIt8dYxdrZ+Hjc+ff9uo3gAM/IBj08fIHLHf8WOaEwz3G0l944xbm
' +
'GtcqO9XllwJBANVUg8ZOIkzY0o2EmoP8zxmjIs4WsUrF2msp7vI9kHLeIUBLCwyv
' +
'fAh0x2SRQTfbr0ZZb7593VyvUGbuP/F4dKECQQCHmZkmpwr0quwp+5Mq7hQ/JKxi
' +
'MByITzU3fOnhyv08Ts4SBcn0+9XraYwqL1zZHMsTdSGUAREeHFMTM/3/3nNpAkAl
' +
'jeA4u658GrtOIGbXD10h5T8OSp5hTF07+kDPMhlIr2PpHozOaeIK1wv23z885xZ+
' +
'6uWqAhxC4bXkuNJW3t6hAkEApKMMfLafxv3S8u8ilRku8JSegPLY325GB2vWHC8H
' +
'jY+Hv3qF9xcP5cbj43KPF0wWhKCECVSvPaMiwUbJzgu9JQ==
' +
'-----END RSA PRIVATE KEY-----';
//new JSEncrypt
var js_encrypt = new JSEncrypt();// jsencrypt.mim.js ,
// : , ,
//
js_encrypt.setPublicKey(pub_key);
//
js_encrypt.setPrivateKey(private_key);
//
var encrypted = js_encrypt.encrypt(data);
console.log(encrypted);
//
var uncrypted = js_encrypt.decrypt(encrypted);
console.log(uncrypted);
});
script>
class Encrypt
{
//
const PUBKEY= '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFUEBi3D1Q8yFco32wWI/se4lA
ftsCNi71rgkLNsOhIR3ZOGywKsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1d
fwdNEZQRHugDiuLIVRdkGWh0loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9Hntl
tgmIbwW9wMA8U1XP9wIDAQAB
-----END PUBLIC KEY-----';
const PRIVATEKEY = '-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDFUEBi3D1Q8yFco32wWI/se4lAftsCNi71rgkLNsOhIR3ZOGyw
KsKjoZ7pewG6PDvISEodkZxVDlV401VP8sIPFP1dfwdNEZQRHugDiuLIVRdkGWh0
loviWWFJuzvJuOFxxyv9IyLt2Whvvoy3y8T9HntltgmIbwW9wMA8U1XP9wIDAQAB
AoGBALoZOuEDQIG9DtZFDSLqJLSyv30pKH8pg5kMkFMXT+QFTBW4diqh6fpTUYJ9
FeAFN41rQRwqXfyLDGptSKWjHQtcBDzpYil+CrFnFFIzADgUtzfKVnfMwgO3X5yx
j+akB9Pm+er1F9t2qh7OwpbiWXo2ThF5Sfn7PjvdVswmOhsBAkEA7MecQO+PIGzr
wwwRLadSyT+fIt8dYxdrZ+Hjc+ff9uo3gAM/IBj08fIHLHf8WOaEwz3G0l944xbm
GtcqO9XllwJBANVUg8ZOIkzY0o2EmoP8zxmjIs4WsUrF2msp7vI9kHLeIUBLCwyv
fAh0x2SRQTfbr0ZZb7593VyvUGbuP/F4dKECQQCHmZkmpwr0quwp+5Mq7hQ/JKxi
MByITzU3fOnhyv08Ts4SBcn0+9XraYwqL1zZHMsTdSGUAREeHFMTM/3/3nNpAkAl
jeA4u658GrtOIGbXD10h5T8OSp5hTF07+kDPMhlIr2PpHozOaeIK1wv23z885xZ+
6uWqAhxC4bXkuNJW3t6hAkEApKMMfLafxv3S8u8ilRku8JSegPLY325GB2vWHC8H
jY+Hv3qF9xcP5cbj43KPF0wWhKCECVSvPaMiwUbJzgu9JQ==
-----END RSA PRIVATE KEY-----';
/**
*
* @param string $encryptString
* @return bool|string
*/
public static function privateDecrypt($encryptString = '')
{
$decrypted = '';
openssl_private_decrypt(base64_decode($encryptString), $decrypted, self::PRIVATEKEY);
return $decrypted;
}
/**
*
* @param string $data
* @return bool|string
*/
public static function publicEncrypt($data = '')
{
$encrypt_data = '';
openssl_public_encrypt($data, $encrypt_data, self::PUBKEY);
$encrypt_data = base64_encode($encrypt_data);
return $encrypt_data;
}
}