【发布时间】:2016-12-28 08:27:00
【问题描述】:
我在 PHP 中使用 OpenSSL 生成私钥和公钥,我打算将它们存储在数据库中(尽管您可能不需要了解 PHP 来回答这个问题)。
它们看起来像这样:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIi4rlLSKA9/8CAggA
...
-----END ENCRYPTED PRIVATE KEY-----
和
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8YvAFZHSGNITeDNdXFbc
...
-----END PUBLIC KEY-----
(是的,这些只是示例)
它们是这样创建的:
$resource = openssl_pkey_new([
'private_key_bits' => '2048',
"private_key_type" => OPENSSL_KEYTYPE_RSA,
]);
openssl_pkey_export($resource, $privateKey, $passPhrase) === false
$opensslDetails = openssl_pkey_get_details($resource);
$publicKey = $opensslDetails['key'];
我想知道这些私钥和公钥的最大长度是多少。
从我的实验中,我发现:
- 1704 个字符的私钥
- 1834 个字符的私钥和密码
- 451 个字符的公钥
但是我还没有找到任何正式的文件来证明是这样的,所以我不能确定。
【问题讨论】:
-
2 倍公钥大小和 8 倍私钥大小是好的上限。如果您真的需要更准确,那么您需要查看键中的元素以及它们是如何序列化的。可以准确计算,但有效密钥有多种形式,并非私钥的所有元素都是强制性的。这个问题可能太宽泛了,因为有许多大小不同的有效键。
-
上限绰绰有余。我只需要一个数据库的上限。
-
@ArtjomB。另外,您是根据什么来确定这些数字的。我的密钥大小是 2048 位,那么我的上界 2048 用于私有,1024 用于公共?
-
2048 位是 256 字节。因为我们在这里讨论 ASCII,所以一个字符就是一个字节。所以 2 * 256 chars = 512 chars 是公钥的上限,而 8 * 256 chars = 2048 chars 是私钥的上限。当然,如果您允许使用非标准的公共指数,则这两个因子都必须加一。
-
哎呀出现了轻微的计算错误。另外,您从哪里计算出上界以及“如果您允许非标准公共指数,则这两个因子必须加一”是什么意思?
标签: database openssl rsa varchar