繁体   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