我知道在使用openssl_public_encrypt
加密数据时,您无法加密任何大于密钥大小的内容。其他人也在PHP文档说明中对此进行了备份:
http://php.net/manual/en/function.openssl-public-encrypt.php#55901
现在我想抛出一个异常,当有人仍然试图这样做时,我正在弄清楚我的钥匙的大小:
$keyDetails = openssl_pkey_get_details($this->public);
$bytes = $keyDetails['bits'] / 8;
这为我提供了我可用的总位数,但这没有考虑填充。我希望能够动态抛出此异常,因此我想要考虑不同大小的公钥。
从PHP文档中已有人注意到:
但是,OpenSSL使用的PKCS#1标准指定了一个填充方案(因此您可以加密较小的数量而不会失去安全性),并且该填充方案至少需要11个字节(如果值为你,它将会更长) '加密更小)。
因此,对于PKCS#1标准,我丢失了11 * 8位,这意味着我只能使用1024位密钥加密最大大小为936位的内容。
除了我没有使用这个标准。我正在使用OPENSSL_PKCS1_OAEP_PADDING
。我不知道11个字节来自哪里我在定义这些常量的PHP代码中找不到它。
如何查找标准的填充,以及我可以加密的最大大小。
即使填充可能会根据“要加密”值的大小而改变,但我想在这种情况下设置一个硬性下限(如果是这种情况则不完全确定)。
干杯。
答案 0 :(得分:2)
OAEP 填充使用42个字节的可用空间。