Heim >php教程 >PHP开发 >Ausführliche Erläuterung der PHP-RSA-Verschlüsselung, Entschlüsselung, Signatur und Signaturüberprüfung

Ausführliche Erläuterung der PHP-RSA-Verschlüsselung, Entschlüsselung, Signatur und Signaturüberprüfung

高洛峰
高洛峰Original
2016-12-30 09:21:093188Durchsuche

PHP-RSA-Verschlüsselung, Entschlüsselung, Signatur, Signaturüberprüfung

Da die Drittorganisation die Java-Version der RSA-Verschlüsselungs- und Entschlüsselungsmethode verwendet, habe ich gerade angefangen, viele PHP-Versionen der RSA-Verschlüsselung und -Entschlüsselung zu finden Die meisten von ihnen sind jedoch nicht für das Andocken an Java geeignet.

Die folgende PHP-Version eignet sich zum Andocken an die Java-Schnittstelle. Bei Verwendung der PHP-Sprache muss der Java-Schlüssel hinzugefügt werden >Verwenden Sie den Schlüssel:

Verschlüsselung öffentlicher Schlüssel public_key.cer
-----BEGIN CERTIFICATE-----
  
-----END CERTIFICATE-----

Entschlüsselung privater Schlüssel private_key.key

Signatur privater Schlüssel sign_key.key


Verifizierung öffentlicher Schlüssel verify.cer

<?php
class RSAUtils{
  //加密公钥
  function redPukey()
  {   
    //拼接加密公钥路径
    $encryptionKeyPath="D:/encryptions.cer";  
    $encryptionKey4Server = file_get_contents($encryptionKeyPath);
 
    $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $publicKey = openssl_pkey_get_public($pem);
    return $publicKey;
  }
   
  //解密私钥
  function redPikey()
  {   
    //拼接解密私钥路径
    $decryptKeyPath="D:/decrypts.key";  
    $decryptKey4Server = file_get_contents($decryptKeyPath);
 
    $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $privateKey = openssl_pkey_get_private($pem);
    return $privateKey;
  }
   
  //签名私钥
  function redSignkey()
  {   
    //拼接签名路径
    $signKeyPath="D:/DEMO/sign.key";
    $signKey4Server = file_get_contents($signKeyPath);
 
    $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $signKey = openssl_pkey_get_private($pem);
    return $signKey;
  }
   
  //验签公钥
  function redVerifykey()
  {   
    //拼接验签路径
    $verifyKeyPath="D:/DEMO/verify.cer"; 
    $verifyKey4Server = file_get_contents($verifyKeyPath);
 
    $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $verifyKey = openssl_pkey_get_public($pem);
    return $verifyKey;
  }
   
  //公钥加密
  function pubkeyEncrypt($source_data, $pu_key) {
    $data = "";
    $dataArray = str_split($source_data, 117);
    foreach ($dataArray as $value) {
      $encryptedTemp = "";
      openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密
      $data .= base64_encode($encryptedTemp);
    }
    return $data;
  }
   
  //私钥解密
  function pikeyDecrypt($eccryptData,$decryptKey) {
    $decrypted = "";
    $decodeStr = base64_decode($eccryptData);
    $enArray = str_split($decodeStr, 256);
 
    foreach ($enArray as $va) {
      openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密
      $decrypted .= $decryptedTemp;
    }
    return $decrypted;
  }
   
  
}
?>
Hinweis:

wird manchmal mit base64_encode verschlüsselt und beim Entschlüsseln in Form von GET an andere Seiten übertragen Bei base64_decode wird eine Fehlermeldung angezeigt.


Als ich auf dieses Problem stieß, fragte ich mich, warum einige korrekt entschlüsselt werden konnten, andere jedoch verstümmelt waren dass es einige chinesische Zeichen gab, bei der Übergabe in GET-Form wird das +-Zeichen durch ein Leerzeichen ersetzt

Um verstümmelte Zeichen zu vermeiden, habe ich einen Schritt zum Ersetzen durchgeführt und es dann tatsächlich entschlüsselt. Das Problem verstümmelter Zeichen besteht nicht mehr!

Wenn Sie beispielsweise eine OID-Variable in Form von GET übergeben, ersetzen Sie beim Entschlüsseln und Wiederherstellen zunächst die Leerzeichen durch +-Zeichen. Dann wird die Ausgabe angezeigt normal.

Wie folgt: $oid=base64_decode (str_replace(" ","+",$_GET[oid]));

Vielen Dank fürs Lesen, ich hoffe es kann allen helfen, vielen Dank für Ihre Unterstützung dieser Seite!

Weitere Artikel zu PHP-RSA-Verschlüsselung, Entschlüsselung, Signatur und Signaturüberprüfung finden Sie auf der chinesischen PHP-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