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-14 10:44:122331Durchsuche

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

Hinweis:

<?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;
  }
    
   
}
?>
Manchmal wird es nach der Verschlüsselung mit base64_encode in Form von GET an andere Seiten übertragen, wenn es mit base64_decode entschlüsselt wird Es werden Zeichen angezeigt.


Als ich auf dieses Problem stieß, war ich verwirrt. Warum konnten einige korrekt entschlüsselt werden, andere jedoch verstümmelt?

Nachdem ich später nachgesehen hatte, stellte ich fest, dass es einige chinesische Zeichen gab. Wenn das +-Zeichen durch ein Leerzeichen ersetzt wird, habe ich einen Schritt zum Ersetzen vorgenommen und es dann tatsächlich entschlüsselt Zeichen existieren 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 ist die Ausgabe normal.

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

Vielen Dank fürs Lesen. Ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung dieser Website. Für weitere verwandte Inhalte bitte Achten Sie auf die chinesische PHP-Website (www.php.cn)!
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:MySQL-BefehlslisteNächster Artikel:MySQL-Befehlsliste