2017-01-07 2 views
0

Ich habe in PHP eine 16 Zeichen Zeichenfolge durch die RSA-Algorithmus und PKCS # 1-Muster mit einem öffentlichen Schlüssel in einem Zertifikat (genannt SanitalCF.cer) zu verschlüsseln. Schließlich müssen in Base64 kodieren.RSA PKCS # 1 verschlüsseln mit PHP

Ich habe diesen Code versucht, was ist los?

function EncryptData($source) 
{ 
    $fp=fopen("cert/SanitelCF.cer","r"); 
    $pub_key=fread($fp,8192); 
    fclose($fp); 

    openssl_public_encrypt($source,$crypttext, $pub_key); 

    return(base64_encode($crypttext)); 
} 
+1

Ich weiß nicht, was passiert, wenn Sie es laufen? –

+0

Bitte geben Sie auch Ihr Zertifikat an, PEM-codiert (Sie können die openssl-Befehlszeile verwenden, um es bei Bedarf zu konvertieren). –

+0

Warum möchten Sie das unsichere PKCS # 1-Padding-Format verwenden? Siehe auch: [ROBOT] (https://robotattack.org/). Sie möchten stattdessen libsodium oder OAEP. –

Antwort

0

Als Erstes stellen Sie sicher, dass Ihr Zertifikat im PEM-Format vorliegt (nicht im DER-Format). Sie können dies mit file <file>.cer tun. Wenn nicht, konvertieren Sie es mit mv <file>.cer <file>.der; openssl x509 -inform DER -in <file>.der -out <file>.cer. Ersetzen Sie natürlich Ihren eigenen Zertifikatsdateinamen.

Jetzt ist das Zertifikat nicht ein öffentlicher Schlüssel, es einen öffentlichen Schlüssel enthält, so dass Sie etwas tun sollten:

<?php 
function EncryptData($source) 
{ 
    $fp=fopen("<file>.cer","r"); 
    $cert_data=fread($fp,8192); 
    fclose($fp); 

    $cert = openssl_x509_read($cert_data); 
    $pub_key = openssl_get_publickey($cert); 
    openssl_public_encrypt($source, $crypttext, $pub_key); 

    return(base64_encode($crypttext)); 
} 

EncryptData("owlstead"); 
?> 
+0

Noch erhalten Sie diese Fehlermeldung: Warnung: openssl_public_encrypt(): Ich weiß nicht, wie Sie öffentlichen Schlüssel von diesem privaten Schlüssel in C: \ Apache24 \ htdocs \ rx \ test.php in Zeile 10 erhalten Warnung: openssl_public_encrypt(): key Parameter ist kein gültiger öffentlicher Schlüssel in C: \ Apache24 \ htdocs \ rx \ test.php in Zeile 10 –

+0

Ich habe überprüft, dass es sich um ein PEM-Format handelt –

+0

Können Sie 'Datei ' auf dem Zertifikat/Schlüssel, den Sie versuchen, ausführen Veröffentliche die PEM (in deiner Frage, nicht in den Kommentaren!)? –

Verwandte Themen