Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得使用openssl\u public\u encrypt可以加密的最大位数?_Php_Encryption_Openssl_Cryptography - Fatal编程技术网

Php 如何获得使用openssl\u public\u encrypt可以加密的最大位数?

Php 如何获得使用openssl\u public\u encrypt可以加密的最大位数?,php,encryption,openssl,cryptography,Php,Encryption,Openssl,Cryptography,我知道,当使用openssl\u public\u encrypt加密数据时,不能加密任何大于密钥大小的内容。其他人也在PHP文档说明中对此进行了备份: 现在我想抛出一个异常,当有人仍然试图这样做,我正在计算我的钥匙的大小,如下所示: $keyDetails = openssl_pkey_get_details($this->public); $bytes = $keyDetails['bits'] / 8; 这为我提供了可用的总位,但没有考虑填充。我希望能够动态抛出此异常,以便考虑

我知道,当使用
openssl\u public\u encrypt
加密数据时,不能加密任何大于密钥大小的内容。其他人也在PHP文档说明中对此进行了备份:

现在我想抛出一个异常,当有人仍然试图这样做,我正在计算我的钥匙的大小,如下所示:

$keyDetails = openssl_pkey_get_details($this->public);
$bytes = $keyDetails['bits'] / 8; 
这为我提供了可用的总位,但没有考虑填充。我希望能够动态抛出此异常,以便考虑不同大小的公钥

从PHP文档中,有人已经注意到:

但是,OpenSSL使用的PKCS#1标准指定了一个填充方案(因此可以在不丢失安全性的情况下加密较小的数量),并且该填充方案至少需要11个字节(如果加密的值较小,则会更长)

因此,使用PKCS#1标准,我会丢失11*8位,这意味着我只能用1024位密钥加密最大大小为936位的内容

除非我没有使用这个标准。我使用的是
OPENSSL\u PKCS1\u OAEP\u PADDING
。我不知道这11个字节是从哪里来的,我在定义这些常量的PHP代码中找不到它

我如何才能找到我的标准的填充,因此我可以加密的最大大小

尽管根据“待加密”值的大小,填充可能会发生变化,但我想在这种情况下设置一个硬下限(不完全确定是否是这种情况)


干杯。

OAEP填充使用了42字节的可用空间。

在阅读了一些文章后也找到了它。谢谢你的回答,我会把这个保存起来以备将来参考!干杯。但前提是SHA-1用作哈希函数。SHA-256的开销是66字节,SHA-512的开销是130字节,或者换句话说:哈希长度的两倍加上两倍。例如,phpseclib可以选择哈希函数。@Stephan-v您还有到这些文章的链接吗?