【发布时间】:2018-01-19 19:08:32
【问题描述】:
[2020 年评论:这是我几年前在开始阅读该主题之前提出的一个研究不足的问题。我回过头来稍微清理一下这个问题——因为当时我想知道的核心是理解为什么密钥必须有一定的大小。然而,当一个人开始学习新事物时,我真的相信提出错误的问题是朝着提出越来越好的问题迈出的重要一步。因此,我觉得很遗憾,这个论坛不鼓励人们提出不能反映良好理解的问题。我希望这个论坛以后能朝着这个方向发展更多。评论结束。]
具体来说,我的问题如下,使用PHP和OpenSSL,函数:
openssl_pkey_new(array $configargs)
在这个论坛的另一部分,有人说 “如果你告诉 $configargs 你想要一个 256 位的密钥大小,或者这样,它太容易被破解了。” 我认为这就是该函数不允许小于 384 位的密钥大小的原因。但怎么就这么容易破解呢?
我想要做的是用用户的私钥在浏览器(在用户端)中加密“ARBITRARY_STRING”,然后将它(连同其他数据)发送到服务器,在那里我用公钥解密。但是,如果用户必须输入的密钥那么长,那将是不切实际的。
感谢您的任何建议!或者更适合该目的的建议。
【问题讨论】:
-
一个 UTF-8 字符占用一个字节,即 8 位。 256 位只有 32 个字节。这意味着 256 位只能允许 32 个字符的密钥。
-
@JosephEvans:没有 UTF-8 字符,但有一个 UTF-8 编码的字符。它最多占用 4 个字节,具体取决于字符。只有当它是 ASCII 集中的一个字符时,它才会占用一个字节。
-
“openssl_pkey_new() 的输出键仍然是字母数字” - 它们不是。只有当您以 PEM 格式保存时,您才会获得字母数字数据,因为这是使用 base64 编码。
-
“比特币的密钥要短得多” - 比特币使用 ECC 而不是 RSA 作为其密钥。 ECC 需要比 RSA 更短的密钥,即 256 位 ECC 与 3072 位 RSA 相当。
-
您似乎将各种公钥加密概念混为一谈。 Stackoverflow 不是解开它们的正确位置。您将不得不去其他地方获取有关公钥密码学的教程。祝你的任务好运。
标签: php ssl cryptography public-key-encryption