Heim > Artikel > Backend-Entwicklung > Beispielanalyse von MD5 kombiniert mit RSA zur Implementierung des Signaturalgorithmus in PHP
Dieser Artikel stellt hauptsächlich den von PHP implementierten Signaturalgorithmus MD5 in Kombination mit RSA vor und analysiert die relevanten Betriebstechniken des von PHP unter Verwendung von MD5 in Kombination mit RSA implementierten Signaturalgorithmus. Außerdem enthält er relevante Anweisungen für Öffentlicher RSA-Schlüssel und privater Schlüssel können sich auf
beziehen. Dieser Artikel beschreibt die Kombination von MD5 und dem in PHP implementierten RSA-Signaturalgorithmus. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
<?php class Md5RSA{ /** * 利用约定数据和私钥生成数字签名 * @param $data 待签数据 * @return String 返回签名 */ public function sign($data='') { if (empty($data)) { return False; } $private_key = file_get_contents(dirname(__FILE__).'/rsa_private_key.pem'); if (empty($private_key)) { echo "Private Key error!"; return False; } $pkeyid = openssl_get_privatekey($private_key); if (empty($pkeyid)) { echo "private key resource identifier False!"; return False; } $verify = openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_MD5); openssl_free_key($pkeyid); return $signature; } /** * 利用公钥和数字签名以及约定数据验证合法性 * @param $data 待验证数据 * @param $signature 数字签名 * @return -1:error验证错误 1:correct验证成功 0:incorrect验证失败 */ public function isValid($data='', $signature='') { if (empty($data) || empty($signature)) { return False; } $public_key = file_get_contents(dirname(__FILE__).'/rsa_public_key.pem'); if (empty($public_key)) { echo "Public Key error!"; return False; } $pkeyid = openssl_get_publickey($public_key); if (empty($pkeyid)) { echo "public key resource identifier False!"; return False; } $ret = openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_MD5); switch ($ret) { case -1: echo "error"; break; default: echo $ret==1 ? "correct" : "incorrect";//0:incorrect break; } return $ret; } }
Anhang: Anweisungen zum Generieren von Zertifikaten mit OpenSSL und zum Erhalten öffentlicher und private Schlüssel
1. RSA-Methode
1. Erstellen Sie ein CA-Stammzertifikat. 1) Erstellen Sie das Verzeichnis „RSA“. 2) Erstellen Sie die folgenden Unterverzeichnisse „certs“, crl , newcerts 3) Führen Sie im RSA-Verzeichnis die folgenden Vorgänge aus:
echo 01 > serial
touch index.txt
openssl req -new -x509 -newkey rsa:1024 - keyout CA.key -out CA .pem (selbstsigniertes CA-Zertifikat generieren)
2. Client-Zertifikatsanforderung
openssl req -new -newkey rsa:1024 - keyout ddmdd_a.key -out ddmdd_a .req (Generieren Sie die Schlüssel- und Zertifikatsanforderung für ddmdd_a. Hinweis: Die hier eingegebenen Benutzerinformationen müssen vollständig mit den CA-Zertifikatinformationen übereinstimmen.)
openssl rsa -in ddmdd_a.key -pubout - out ddmdd_a.pub (öffentlichen Schlüssel exportieren)
3. Zertifikate für Clients ausstellen
openssl ca -keyfile CA.key -cert CA.pem -in ddmdd_a.req -out ddmdd_a.pem -notext (CA-Schlüssel verwenden und Zertifikat werden für ddmdd_a-Zertifikat ddmdd_a.pem ausgestellt)
openssl ca -keyfile CA.key -cert CA.pem -in subca_rsareq.pem -out subca.pem -notext ( Ausstellung eines sekundären CA-Zertifikats)
4. Zertifikatformat konvertieren
openssl x509 -inform pem -outform der -in ddmdd_a.pem -out ddmdd_a.der
openssl pkcs12 -export -in ddmdd_a.pem -inkey ddmdd_a_rsakey.pem -out ddmdd_a.pfx
openssl pkcs12 -in ddmdd_a.pfx -out ddmdd_a.pem
openssl rsa -in ddmdd_a.key -out. ddm dd_a_open.key ( Passwort für privaten Schlüssel löschen
5. Zertifikatssperrliste erstellen
echo 01 >openssl ca -keyfile CA.key -cert CA.pem - revoke ddmdd_a.pem (vom CA-Zertifikat ddmdd_a.pem widerrufen)
openssl ca -gencrl -keyfile CA.key -cert CA.pem -out CA.crl (Zertifikatssperrliste generieren oder aktualisieren)
openssl x509 -in CA.pem -noout –text
2 🎜>1. Erstellen Sie das CA-Stammzertifikat. 1) Erstellen Sie das Verzeichnis DSA. 2) Erstellen Sie die folgenden Unterverzeichnisse: certs, crl, newcerts. 3) Führen Sie die folgenden Vorgänge im DSA-Verzeichnis aus:
echo 01 >touch index.txt
openssl dsaparam -out CA.para 1024 (dsa-Parameterdatei generieren)openssl req -new -x509 -newkey dsa:CA.para -keyout CA.key -out CA.pem (Verwenden Sie DSA-Parameter, um ein selbstsigniertes CA-Zertifikat zu generieren)
2. Client-Zertifikatsanforderung
openssl req -new -newkey dsa:ddmdd_b .para -keyout ddmdd_b.key -out ddmdd_b.req (Verwenden Sie den dsa-Parameter, um die Schlüssel- und Zertifikatsanforderung für ddmdd_b zu generieren. Hinweis: Die hier ausgefüllten Benutzerinformationen müssen vollständig sein im Einklang mit den CA-Zertifikatinformationen)
openssl dsa -in ddmdd_b.pub (Öffentlichen Schlüssel exportieren)
3. Zertifikate für Kunden ausstellen
3. Erhalten Sie den öffentlichen Schlüssel und den privaten Schlüssel
a) Wenn Sie mit der oben genannten Methode ein Zertifikat generieren, können Sie den öffentlichen Schlüssel und den privaten Schlüssel mit den folgenden Befehlen erhalten. Öffentlichen Schlüssel exportieren:
DSA-Modus:
openssl dsa -in ddmdd_b.key -pubout -out ddmdd_b.pub.pemRSA-Modus: openssl rsa -in ddmdd_a.key -pubout -out ddmdd_a.pub.pem
Privaten Schlüssel exportieren:
openssl rsa -in server.key -text > private.pemb) Öffentliche und private Schlüssel direkt generieren:
openssl genrsa -out private.pem 1024openssl pkcs8 -nocrypt -topk8 - in private.pem -out pkcs8.pem
openssl rsa -pubout -in private.pem public.pemDas obige ist der detaillierte Inhalt vonBeispielanalyse von MD5 kombiniert mit RSA zur Implementierung des Signaturalgorithmus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!