Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung der RSA-Verschlüsselung und -Entschlüsselung in PHP

Ausführliche Erklärung der RSA-Verschlüsselung und -Entschlüsselung in PHP

小云云
小云云Original
2018-03-22 15:47:393895Durchsuche

Wenn der PHP-Server mit dem Client interagiert und eine offene API bereitstellt, ist es normalerweise notwendig, sensible Teile der API-Datenübertragung zu verschlüsseln. Zu diesem Zeitpunkt kann die asymmetrische RSA-Verschlüsselung nützlich sein. Hier ist ein Beispiel, um zu veranschaulichen, wie Ich hoffe, dass es jedem helfen kann, PHP zur Implementierung der Datenverschlüsselung und -entschlüsselung zu verwenden.

1. Der erste Schritt bei der Ver- und Entschlüsselung besteht darin, ein Paar aus öffentlichem Schlüssel und privatem Schlüssel zu generieren. Der durch den privaten Schlüssel verschlüsselte Inhalt kann durch den öffentlichen Schlüssel entschlüsselt werden (und umgekehrt)

Open Source herunterladen Entpacken Sie das RSA-Schlüsselgenerierungstool openssl (normalerweise werden Linux-Systeme mit diesem Programm geliefert) in einen separaten Ordner, geben Sie das bin-Verzeichnis ein und führen Sie den folgenden Befehl aus:

openssl genrsa -out rsa_private_key. pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

Der erste Befehl generiert die ursprüngliche private RSA-Schlüsseldatei rsa_private_key.pem, der zweite Befehl konvertiert den ursprünglichen privaten RSA-Schlüssel in das pkcs8-Format und der dritte Befehl generiert den öffentlichen RSA-Schlüssel rsa_public_key.pem
As Aus dem Obigen ist ersichtlich, dass der Schlüssel über den privaten Schlüssel den entsprechenden öffentlichen Schlüssel generieren kann. Daher verwenden wir den privaten Schlüssel private_key.pem auf der Serverseite und verteilen den öffentlichen Schlüssel an Front-Ends wie Android und iOS

2. Verwenden Sie den generierten öffentlichen Schlüssel und den privaten Schlüssel im PHP-Schlüssel zum Ver- und Entschlüsseln, laden Sie den Code direkt hoch

<?php
$private_key = &#39;-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----END RSA PRIVATE KEY-----&#39;;

$public_key = &#39;-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----&#39;;

//echo $private_key;
$pi_key =  openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n";
print_r($pu_key);echo "\n";


$data = "aassssasssddd";//原始数据
$encrypted = ""; 
$decrypted = ""; 

echo "source data:",$data,"\n";

echo "private key encrypt:\n";

openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"\n";

echo "public key decrypt:\n";

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";

echo "---------------------------------------\n";
echo "public key encrypt:\n";

openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n";

echo "private key decrypt:\n";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n";

Verwandte Empfehlungen:

Detaillierte Erklärung zur Verwendung der PHP-RSA-Verschlüsselung und -Entschlüsselung

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der RSA-Verschlüsselung und -Entschlüsselung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn