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
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; } } ?>
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!