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(如果没有给出)。
答案 0 :(得分:7)
您不为Diffie-Hellman生成共享素数或生成器。参见:
http://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange
参数P和G由双方提前商定。使用维基百科文章的符号,crypto:dh_generate_key
用于步骤2& 3生成a
/ A
& b
/ B
,然后crypto:dh_compute_key
用于步骤4& 5计算共享密钥s
。
对于RSA,我不知道生成公钥/私钥对的标准库函数。从我记忆中生成素数是一个相当复杂的算法;我强烈建议你不要自己编写代码。 Diffie-Hellman密钥对不适合与RSA一起使用;它们是用于不同目的的不同算法。
通常,您不需要在运行时生成这些,因为您可以重用密钥对。您可以使用任意数量的其他来源来实际生成它。 (也许ssh-keygen会起作用?而且总是OpenSSL。)要使用你创建的密钥对,你可以使用crypto:rsa_ public/private _ encrypt/decrypt
函数。
答案 1 :(得分:2)
见cutkey(https://github.com/yrashk/cutkey)
" cutkey是一个用于生成RSA密钥的Erlang应用程序。它被实现为 一个端口驱动程序,它在一个线程上调用OpenSSL的RSA_generate_key 异步池。"
答案 2 :(得分:1)
os:command(“openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048”)。
答案 3 :(得分:0)
您可以使用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()}