使用Erlang生成RSA密钥对?

使用Erlang生成RSA密钥对?,erlang,cryptography,rsa,public-key,private-key,Erlang,Cryptography,Rsa,Public Key,Private Key,Erlang有一个生成公钥和私钥的加密函数(下面复制了文档)。然而,文档似乎很模糊,我找不到任何描述如何生成共享素数或生成器的示例代码。有人可以发布一个生成公钥/私钥对的示例吗?提前感谢您的帮助 dh_generate_key(DHParams) -> {PublicKey,PrivateKey} dh_generate_key(PrivateKey, DHParams) -> {PublicKey,PrivateKey} 类型: DHParameters=[P,G] P、 G

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公钥和私钥(如果未提供)。

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

参数p和G由双方提前商定。使用维基百科文章的符号,
crypto:dh_generate_key
用于步骤2和3,以生成
a
/
a
&
b
/
b
,然后
crypto:dh_compute_key
用于步骤4和5,以计算共享秘密
s

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

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

请参阅cutkey()

“cutkey是一款用于生成RSA密钥的Erlang应用程序。它的实现如下所示: 在来自的线程上调用OpenSSL的RSA_generate_密钥的端口驱动程序 异步池。”


操作系统:命令(“openssl genpkey-算法RSA-out private_key.pem-pkeyopt RSA_keygen_bits:2048”)。

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

2048年的长度

{Pub, Priv} = crypto:generate_key(rsa, {2048,65537}).
或者长度为1024

{Pub, Priv} = crypto:generate_key(rsa, {1024,65537}).
见:(第37页)

在哪里


你知道RSA和Diffie Hellman之间的区别吗?如果你解释一下为什么需要RSA密钥对,可能会有所帮助。无意冒犯,但如果您混淆了RSA和DH,您可能会在不知不觉中尝试使用不适合您的应用程序的加密算法。也许我们可以推荐一个更合适的。如果您只想为RSA获得一对公钥和私钥,请尝试以下操作:
crypto:generate_key(RSA,{1024,3})
generate_key(Type, Params) -> {PublicKey, PrivKeyOut}
Type = rsa


Params = rsa_params() =
    {ModulusSizeInBits :: integer(),
     PublicExponent :: key_integer()}