簡體   English   中英

如何加密 PHP 中的長字符串?

[英]How to encrypt long strings in PHP?

我正在使用 PHP 的 openssl_public_encrypt() 來使用 RSA 加密數據。 但它不會加密大於一定大小的數據。

我怎樣才能讓它加密任意長度的數據?

RSA,使用 PKCS1 填充,只允許您執行長度為密鑰(以字節為單位)的字符串 - 11。這不是 OpenSSL 或 PHP 限制,而是 RSA 限制。

如果您想使用 openssl_* 函數集來處理更長的字符串,請使用openssl_sealopenssl_open openssl_seal 生成一個隨機字符串,使用 RSA 對其進行加密,然后使用前面提到的隨機字符串作為密鑰對您實際嘗試使用 RC4 加密的數據進行加密。

phpseclib 是一個純 PHP RSA 實現,采用不同的方法。 如果您堅持加密大於 RSA 密鑰的字符串,它將將該字符串拆分為 RSA 可以處理的最大大小的塊,然后將結果連接起來。

phpseclib OpenSSL 互操作性頁面討論了如何使用 phpseclib 執行與 openssl_seal / openssl_open 相同的操作。

希望有幫助!

php.net 頁面對這個問題有很好的提示(和往常一樣) http://www.php.net/manual/en/function.openssl-public-encrypt.php#95307

您可以:

  • 使用對稱加密方法加密數據,使用隨機密鑰,然后使用非對稱加密方法的公鑰加密(使用公鑰加密的隨機密鑰對於解密數據的用戶是必需的。)
  • 將數據拆分為非對稱加密方法處理的大小的塊后,使用非對稱加密方法加密數據

第一個實現混合密碼系統 Using PHP and the openSSL extension you can use openssl_seal() , which (since PHP 5.3.0) allows to set the cipher method (by default, RC4) and (since PHP 7.0.0) the initialization vector. 如果您不使用 PHP 7.x,或者您想編寫與 PHP 5.3.3 及更高版本兼容的代碼,並且您希望能夠初始化向量,您可以使用openssl_random_pseudo_bytes()生成隨機密鑰openssl_encrypt()加密數據, openssl_public_encrypt()加密隨機密鑰。

我不會將openssl_seal()與不允許我設置密碼方法的 PHP 版本一起使用(但是,我不會使用 PHP 版本,因為它不再受支持),並且我不會使用 RC4 作為密碼方法,在 PHP 版本上,允許我使用 select 密碼方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM