2015-02-11 26 views
1

我需要發送一個RSA使用公鑰加密的密碼(以及其他一些數據)。下面是從密碼的文檔的精確操作的指令:PHP RSA加密邏輯

  • 編碼密碼Base64和確保UTF-8編碼
  • 加密的口令與RSA與提供的公共密鑰,沒有塊模式,和PKCS1Padding
  • 編碼導致加密的Base64中以可靠的UTF-8編碼

下面是我使用我的代碼似乎是正確的:

function encryptPassword($pass) { 

    $pass = base64_encode($pass); 

    $fp = fopen("./cert.crt", "r"); 
    $publicKey = fread($fp, 8192); 
    fclose($fp); 
    openssl_get_publickey($publicKey); 

    openssl_public_encrypt($pass, $cryptedText, $publicKey, OPENSSL_PKCS1_PADDING); 

    return base64_encode(utf8_encode($cryptedText)); 
} 

我在對方說錯誤,說密碼無法解碼。除了錯誤信息之外,他們的支持基本上是不存在的,他們說一切都是正確的。我的問題是,我是否根據文檔發送了他們要求的內容?

在此先感謝!

回答

1

不,你已經採取了Base64以確保UTF-8編碼太字面意思。 utf8_encode將一個文本編碼轉換爲另一個,但$cryptedText不是文本。它是一個二進制字符串,所以在編碼時會丟失一些字符。簡單地將其刪除,因爲Base64編碼給你已經是二進制數據的文本表示:

return base64_encode($cryptedText); 

此外,你可能想公鑰資源傳遞到加密功能:

$key_resource = openssl_get_publickey($publicKey); 
openssl_public_encrypt($pass, $cryptedText, $key_resource, OPENSSL_PKCS1_PADDING); 
+0

感謝您的答覆。當它不起作用時,我把那個utf8_encode作爲一個絕望嘗試扔進去。我已經拿出來了,現在也在傳遞公共密鑰資源,但是我仍然從服務器收到相同的錯誤。 – rchamberlin 2015-02-11 20:38:53

+0

你可以試試'$ pass = base64_encode(utf8_encode($ pass));',但除此之外,我認爲這符合描述。 – 2015-02-11 20:44:31