从模数和指数创建rsa公钥

ems*_*tol 12 openssl rsa

我想验证RSA签名.我有数据来验证,签名和公钥以模数和指数的形式.我想使用openssl进行验证.可能吗?我知道我可以使用,openssl rsautl -verify -in sig -inkey key.pem但我不知道如何(使用openssl)创建一个只有它的模数和指数的公钥.

也许其他想法如何检查这个签名(除了写一些程序)?

oli*_*liv 11

要生成要使用的PEM格式的RSA公钥openssl,您可以按照以下步骤操作.

创建ASN1定义文件

修改以下模板以包含模数和指数

# Start with a SEQUENCE
asn1=SEQUENCE:pubkeyinfo

# pubkeyinfo contains an algorithm identifier and the public key wrapped
# in a BIT STRING
[pubkeyinfo]
algorithm=SEQUENCE:rsa_alg
pubkey=BITWRAP,SEQUENCE:rsapubkey

# algorithm ID for RSA is just an OID and a NULL
[rsa_alg]
algorithm=OID:rsaEncryption
parameter=NULL

# Actual public key: modulus and exponent
[rsapubkey]
n=INTEGER:0x%%MODULUS%%

e=INTEGER:0x%%EXPONENT%%
Run Code Online (Sandbox Code Playgroud)

您也可以使用sed编写脚本,而不是编辑

sed -i "s/%%MODULUS%%/$(xxd -ps -c 256 mymodulus.bin)/" def.asn1
Run Code Online (Sandbox Code Playgroud)

请注意,-c 256应根据您的密钥长度(以字节为单位)进行选择.

您可以对指数使用类似的命令.

生成RSA密钥

使用以下openssl命令.这将为您提供DER编码的RSA密钥.

openssl asn1parse -genconf def.asn1 -out pubkey.der -noout
Run Code Online (Sandbox Code Playgroud)

然后将其转换为PEM密钥

openssl rsa -in pubkey.der -inform der -pubin -out pubkey.pem
Run Code Online (Sandbox Code Playgroud)

使用您的密钥验证

你可以使用openssl dgst -verifyopenssl rsautl -verify


Dir*_*lik -5

检查手册页应该会显示以下内容

 # generate private key
 openssl genrsa > key.priv

 # use it to sign something
 echo "Dirk should be given $10" | openssl rsautl -inkey key.priv -sign > msg.sig

 # create a pub key (modules, exp) from the private key
 openssl rsa -pubout < key.priv > key.pub

 # use that to verify the signature.
 openssl rsautl -in msg.sig -verify -inkey key.pub -pubin
Run Code Online (Sandbox Code Playgroud)

所有这些假设您想要原始密钥。如果我理解你下面的评论 - 看来你没有正常格式的模块/exp。因此,您首先必须将其打包为 ASN.1,以便通过常用工具使用它。

你必须为此编写一些c/java/等代码。一个简单的方法是使用 openssl 库;并填写 RSA * 结构。

  • 我不明白它如何解决我的问题。我只有两个数字:模数和指数。我想创建一个文件 key.pub ,其中包含根据这些数字创建的公钥。没有其他的。我很久以前就问过这个问题,但仍然不知道该怎么做。 (3认同)