2017-01-07 175 views
0

我在PHP由RSA algoritm和PKCS#1模式與證書中包括了一個公鑰的16個字符的字符串加密(稱爲SanitalCF.cer)。 最後必須在base64中進行編碼。RSA PKCS#1加密與PHP

我嘗試了這段代碼,怎麼了?

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

我不知道,會發生什麼,當你運行它? –

+0

請包括您的證書以及PEM編碼(如果需要,可以使用openssl命令行進行轉換)。 –

+0

爲什麼你想使用不安全的PKCS#1填充格式?另請參閱:[ROBOT](https://robotattack.org/)。您需要使用libsodium或OAEP。 –

回答

0

首先,確保您的證書是PEM格式(不是DER格式)。您可以使用file <file>.cer來完成此操作。如果不是,請使用mv <file>.cer <file>.der; openssl x509 -inform DER -in <file>.der -out <file>.cer進行轉換。替換您自己的證書文件名稱當然。

現在的證書是不公鑰,它包含一個公開密鑰,所以你應該做這樣的事情:

<?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

還有這個errore:警告:openssl_public_encrypt():不知道如何從第10行的C:\ Apache24 \ htdocs \ rx \ test.php中的這個私鑰獲取公鑰, 警告:openssl_public_encrypt():key參數是不是在C有效公鑰:\ Apache24 \ htdocs中\ RX \ test.php的第10行 –

+0

我verifyed這是一個PEM格式 –

+0

你可以做執行'在證書/密鑰您正在嘗試文件',或發佈PEM(在你的問題中,而不是在評論中!)? –