我制作了以下文件: asn_format_mykey.txt
asn1=SEQUENCE:rsa_key
[rsa_key]
version=INTEGER:0
modulus=INTEGER:305512047893009
pubExp=INTEGER:78221649299689
privExp=INTEGER:181909
p=INTEGER:17477423
q=INTEGER:17480383
e1=INTEGER:181909
e2=INTEGER:181909
coeff=INTEGER:1611938
Run Code Online (Sandbox Code Playgroud)
我运行以下命令来获取key.pem(私钥)和pkey.pem(公钥)
openssl asn1parse -genconf "asn_format_mykey.txt" -out "key.der"
openssl rsa -inform der -in "key.der" -outform pem > "key.pem"
openssl rsa -inform der -in "key.der" -outform pem -pubout>"pkey.pem"
Run Code Online (Sandbox Code Playgroud)
然后,我尝试使用-rawwith加密一条小消息openssl rsautl
echo 'aaaa'| openssl rsautl -encrypt -pubin -inkey "pkey.pem" -raw -out "message.encrypted"
Run Code Online (Sandbox Code Playgroud)
它返回:
RSA operation error 140063665198744:error:0406B07A:rsa
routines:RSA_padding_add_none:data too small for key
size:rsa_none.c:74:
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
小智 5
对于 RSA,您的模数异常小且不安全,但我想您知道这一点!
十进制的模数是305512047893009,十六进制的模数是0115DC91160DA11,这是一个正好是 7 个字节长的数字。
您已通过该-raw标志,这意味着您没有使用任何标准填充方案,这意味着您有责任确保输入消息的格式正确以进行 RSA 加密。实际上,这意味着您的输入消息也必须正好是 7 个字节长且值小于模数,因此您需要创建一个二进制文件并将其用作输入。
使用十六进制编辑器,我用 bytes 创建了一个,将其01146161616161保存在一个名为 的文件中message.plain,然后我使用了与您相同的命令,但-in message.plain添加了,它成功地加密了消息:
openssl rsautl -encrypt -pubin -inkey "pkey.pem" -raw -in "message.plain" -out "message.encrypted"
Run Code Online (Sandbox Code Playgroud)
注意:作为练习,这一切都可以,但是,对于任何实际工作,您不应该发明自己的填充方案 - 使用现有方案之一。
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |