[英]How to encrypt long strings in PHP?
我正在使用 PHP 的 openssl_public_encrypt() 來使用 RSA 加密數據。 但它不會加密大於一定大小的數據。
我怎樣才能讓它加密任意長度的數據?
RSA,使用 PKCS1 填充,只允許您執行長度為密鑰(以字節為單位)的字符串 - 11。這不是 OpenSSL 或 PHP 限制,而是 RSA 限制。
如果您想使用 openssl_* 函數集來處理更長的字符串,請使用openssl_seal和openssl_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.