9

Erlang 有一个加密功能,可以生成公钥(下面复制的文档)。但是文档似乎含糊不清,我找不到任何描述如何生成共享素数或生成器的示例代码。有人可以发布一个生成公钥/私钥对的示例吗?提前感谢您的帮助!

dh_generate_key(DHParams) -> {PublicKey,PrivateKey} 
dh_generate_key(PrivateKey, DHParams) -> {PublicKey,PrivateKey} 

类型:DHParameters = [P, G] P, G = Mpint 其中 P 是共享素数,G 是共享生成器。PublicKey, PrivateKey = Mpint() 生成 Diffie-Hellman PublicKey 和 PrivateKey(如果未给出)。

4

4 回答 4

9

您不会为 Diffie-Hellman 生成共享素数或生成器。看:

http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange

参数P和G是双方提前商定的。使用 Wikipedia 文章的符号,crypto:dh_generate_key用于步骤 2 和 3 以生成a/ A& b/ B,然后crypto:dh_compute_key用于步骤 4 和 5 以计算 shared secret s

对于RSA,我不知道生成公钥/私钥对的标准库函数。根据我的记忆,生成素数是一个相当复杂的算法。我强烈建议您不要尝试自己编写代码。Diffie-Hellman 密钥对不适用于 RSA;它们是用于不同目的的不同算法。

通常,您不需要在运行时生成这些,因为您可以重用密钥对。您可以使用任意数量的其他来源来实际生成它。(也许 ssh-keygen 会起作用?而且总是有OpenSSL。)要使用您创建的密钥对,您将使用这些crypto:rsa_ public/private _ encrypt/decrypt函数。

于 2010-01-21T02:04:15.623 回答
2

见 cutkey ( https://github.com/yrashk/cutkey )

“cutkey 是一个用于生成 RSA 密钥的 Erlang 应用程序。它被实现为一个端口驱动程序,它在来自异步池的线程上调用 OpenSSL 的 RSA_generate_key。”

于 2014-05-26T21:14:27.650 回答
2

os:command("openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048")。

于 2017-06-27T12:09:36.367 回答
2

您可以使用 crypto:generate_key/2 函数来创建 RSA 公钥和私钥:

对于 2048 长度

{Pub, Priv} = crypto:generate_key(rsa, {2048,65537}).

或者对于 1024 长度

{Pub, Priv} = crypto:generate_key(rsa, {1024,65537}).

请参阅:https ://erlang.org/doc/apps/crypto/crypto.pdf (第 37 页)

generate_key(Type, Params) -> {PublicKey, PrivKeyOut}

在哪里

Type = rsa


Params = rsa_params() =
    {ModulusSizeInBits :: integer(),
     PublicExponent :: key_integer()} 
于 2020-09-03T15:23:05.433 回答