我知道,使用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文档中,有人已经注意到:
但是,PKCS#1标准( OpenSSL使用该标准)指定了填充方案(因此您可以在不丢失安全性的情况下加密较小的数量),填充方案至少需要11个字节(如果要加密的值较小,则会更长)。
因此,使用PKCS#1标准,我将丢失11*8位,这意味着我只能用1024位密钥对最大大小为936位的东西进行加密。
但我没有用这个标准。我正在使用OPENSSL_PKCS1_OAEP_PADDING。我不知道这11个字节是从哪里来的,我在PHP代码中找不到这些常量的定义。
如何找出我的标准的填充,因此,我可以加密的最大尺寸。
尽管填充可能会根据“要加密”值的大小而改变,但我希望在这种情况下设置一个严格的下限(不完全确定是否是这种情况)。
干杯。
发布于 2017-02-22 14:56:06
OAEP填充使用42字节的可用空间。
https://stackoverflow.com/questions/42388158
复制相似问题