【发布时间】:2017-04-04 07:06:55
【问题描述】:
openssl_public_encrypt 显然无法处理任意明文。
<?php
$msg = '{"args":["argxx","argyy"],"data":"xx\nyyy\n","symkey":"0a6e860640413acfe6e4e461a28fab3fad3aff78ef95c962c5e63bef7e2b3439"}';
# If you uncomment this line, the function succeeds.
# $msg = 'test';
$pub = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC80g7AA5XexMCiJW3tKr/eeN8Q
EMNfGYG0qiUuLS/dtir7c3c1MmpNzrE8R+xqleOLNVkbbSZqqQ2qUJtPhwbLhQyL
yilRH5WMz9Pabx62v7k+vm81/6Xa9fnIV7DE0DZhMO5vQvBE3+5jkXbfU4yBZRv5
UOty5gqGXXaR6bim4QIDAQAB
-----END PUBLIC KEY-----';
if (openssl_public_encrypt ($msg, $enc, $pub))
{
print bin2hex ($enc);
exit (0);
}
else
{
print "Could not encrypt message.\n";
}
?>
这在 Ubuntu PHP 7 上输出 Could not encrypt message.。
为什么在这个 $msg 上失败了?
【问题讨论】:
-
它在 5.6 上也失败了。相关评论:php.net/manual/en/function.openssl-public-encrypt.php#95307
-
你确定是
$msg吗?这适用于其他消息? -
消息是否比 RSA 密钥长?
-
因为消息长度不能大于(size_t)INT_MAX:github.com/php/php-src/blob/…github.com/php/php-src/blob/master/Zend/zend_range_check.h#L54
标签: php public-key-encryption php-openssl