Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielanalyse von MD5 kombiniert mit RSA zur Implementierung des Signaturalgorithmus in PHP

Beispielanalyse von MD5 kombiniert mit RSA zur Implementierung des Signaturalgorithmus in PHP

黄舟
黄舟Original
2017-10-09 09:10:532099Durchsuche

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=&#39;&#39;)
  {
    if (empty($data))
    {
      return False;
    }
    $private_key = file_get_contents(dirname(__FILE__).&#39;/rsa_private_key.pem&#39;);
    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=&#39;&#39;, $signature=&#39;&#39;)
  {
    if (empty($data) || empty($signature))
    {
      return False;
    }
    $public_key = file_get_contents(dirname(__FILE__).&#39;/rsa_public_key.pem&#39;);
    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)

6. Zertifikatsinformationen anzeigen

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 dsaparam -out ddmdd_b.para 1024 (DSA-Parameterdatei generieren)

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

openssl ca -keyfile CA.key -cert CA.pem - in ddmdd_b.req -out ddmdd_b.pem -notext (verwenden Sie den CA-Schlüssel und das Zertifikat, um das Zertifikat ddmdd_b.pem für ddmdd_b auszustellen)

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.pem

RSA-Modus: openssl rsa -in ddmdd_a.key -pubout -out ddmdd_a.pub.pem

Privaten Schlüssel exportieren:

openssl rsa -in server.key -text > private.pem

b) Öffentliche und private Schlüssel direkt generieren:

openssl genrsa -out private.pem 1024

openssl pkcs8 -nocrypt -topk8 - in private.pem -out pkcs8.pem

openssl rsa -pubout -in private.pem public.pem

Das 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!

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
Vorheriger Artikel:Allgemeine PHP-FunktionenNächster Artikel:Allgemeine PHP-Funktionen