首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得您可以用openssl_public_encrypt加密的最大位数?

如何获得您可以用openssl_public_encrypt加密的最大位数?
EN

Stack Overflow用户
提问于 2017-02-22 09:54:29
回答 1查看 302关注 0票数 1

我知道,使用openssl_public_encrypt加密数据时,不能加密比密钥大小更大的内容。其他人在PHP文档说明中也对此进行了备份:

http://php.net/manual/en/function.openssl-public-encrypt.php#55901

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

代码语言:javascript
复制
$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代码中找不到这些常量的定义。

如何找出我的标准的填充,因此,我可以加密的最大尺寸。

尽管填充可能会根据“要加密”值的大小而改变,但我希望在这种情况下设置一个严格的下限(不完全确定是否是这种情况)。

干杯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 14:56:06

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42388158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档