openssl rsa 加密问题

2016-10-19 11:31:35 +08:00
 harry890829

现需要向后端发送报文, http post 方法

刚开始我用 python 写了个 demo 测试,发现没有问题,后端返回成功

于是现加入 c/c++项目中,但是 rsa 私钥加密(后端就给我了私钥……不过各种格式都有, key/pem 等)后,后端报错,检查问题发现, python 中 rsa 加密结果的 16 进制数据与 openssl 中 rsa 加密结果的 16 进制数据完全不同,都采用了 RSA PKCS#1 v1.5 。

c/c++中指明载入私钥、使用私钥加密

python 中直接读取*.key 文件后进行加密操作,并没有指明是私钥 python 代码

def RSAEncrypt():
    key = RSA.importKey(open('domain.key').read())
    cipher = PKCS1_v1_5.new(key)
    return base64.b64encode(cipher.encrypt(sKeys))

在 openssl 使用中,我有什么地方没有注意到么?

2446 次点击
所在节点    问与答
9 条回复
jugelizi
2016-10-19 11:43:17 +08:00
http post 方法 后端发送报文

难道不是 js 来获取密钥加密吗

数据长度不能超 14 还是 16 来着
harry890829
2016-10-19 11:44:58 +08:00
@jugelizi 呃,后端和我说这个还没有完善,直接给我了个私钥,让我加密传到后面就好
wy315700
2016-10-19 12:16:37 +08:00
公钥加密应该会有一个随机数,每次加密结果是不一样的。
shiji
2016-10-19 13:55:30 +08:00
楼上说的对, RSA 公钥加密密文每次都是不一样的。 RSA 私钥加密密文每次都是一样的。

比如我用 PHP 举个例子你看看。公钥私钥分别加密两次

http://main.xfiddle.com/87218f9d/rsa_encryption.php
代码在这里: http://main.xfiddle.com/87218f9d/rsa_encryption.txt
wy315700
2016-10-19 15:25:13 +08:00
@shiji 私钥是签名吧,不能加密吧
yangff
2016-10-19 15:27:29 +08:00
@wy315700 显然可以……
shiji
2016-10-19 15:56:05 +08:00
@wy315700 RSA 的私钥是公钥的亲爹啊,公钥能做的私钥都能做, 而且公钥丢了能直接通过私钥恢复出来。
fangjinmin
2016-10-19 17:27:47 +08:00
首先要搞清楚, RSA 是公开键加密方式 。

你用自己的私钥加密,服务器用你的公钥解密。

不管是.key 还是.pem, 你看一下,对方给你的私是不是这样的格式。

-----BEGIN RSA PRIVATE KEY-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
yrVybznT4e+i2bxPP1uOu3Dc48xkzu3yjX+EJ7BYVa7u6lCkMjCPACA6TALuWHBk
c50IXXbJa4VMNe/WPB26oX0QsXnXTqZ9fht2JYdOxdlw4j8eWds2nGfXyyp9bFxg
8Ey9AIMWsnIOrBsdcubrgmcoM/QRonT4RMoj++zuuAa56t/+B4VArCIea5LBUGcB
OK0ClbABTGTtcTc8ZTj0oiwcoYCLf70D4Ytb93oMuYwoX5bepCLxxNrjdgDENrVl
wGqQnMSAO6TEySuIPghYgbfpyZPPQq1Sg1PcewIDAQABAoIBAFSlOTXHJT+xu1hu
KZMjJ4amu4hf4T+SZdEnK0zfRsoREOYe328T5cPaDY/zFzHDV3bxF11O03KypfFV
aCsZ8uIYLozlS0xDtNeRooEs8wsoz4TnDQx59wsguJ1aFqfkwYNEHZxfUpuA7iCp
01gKcocL+9cdXJ1MSYEuA866qVsu4zILhpOcSzPaT5Ndi6CoUhZQ2/1Ru1BfuKIv
hWa4WlQr+1PhzzI2wzWPOiWaEsew/WGkRqPsL45C7CWelfa/suJ89TxaECZu1fOZ
WRwGgXLWlNr13dCtguAanvl4ricM8dXtNXA+9jrhl7OMaDW0YlX2+iDCSviRu6Ik
jx1QHIECgYEA+xxvvdhhNbYVO9jJSg/nqMaRi0UMn/aDMiw1QXY1XNpZIjQxxYbj
O/au+jMqwllqKCO/zVmZlLeJ9kttbQgtW+afKool+vChEdZDmBa/4pBcTibsdIq2
xwUoZFf9wr8Kpk2JVfFjjUfnFBFmDya3EtNBIDNhF8KzfRmgJ4Vw0LECgYEA8s4G
qB1iSYUxGn24FBJ2sJxMYcxkasLhil8UEBKHk8ainsAX69yDlCoLmzmoAEytOYZS
FgSW+VZcnoolqv8Ra7QEqv9HuELBWx/gPn6cMnmJXuQaOHEV3Vn7v+T54lVUA2nG
sE3FINrS7kji6oslzq5semLdkmFNN26ORnLLausCgYEAzEkCDuwtiUisVZezifEO
gZupZCe0cZ5WdUbJvIuyNevcf5r+srddvbad+yYNLzcWybjrnN+7teTq89fBGeaB
IDaqXi0tYMzJ/HzXWK+JQ4Q1086OpvECaT6k8Z0z8G8C9vA1Phm254ULVKQi50iT
v1jlrpCd+HqJEsj6JazFbsECgYEA7TqfBmKvRWX9NAThdbsUfDo55tPsyOLfunJr
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
KEZMFoTo0u3LMJpM4piogDUYcSstiqgumNNjZ1ZmAKr2CnMp3WZOVsWB9yNabm52
VB6U4UECgYEAg8N4W/YaohOVbe1khTLkDeTQjh5SGcigRNyvjPic0Z+9s+mwMnXV
f0095q9mmJcSpc3FpqQ7nk+MCQwbYbPcNsN2lYoqMfst800NafRXMXeeHImxr+WF
h8dycnofLi+5tg/PT/9NjBoePf8rvbmSnmQYnsOqo4WIPZAeF1sve6I=
-----END RSA PRIVATE KEY-----
harry890829
2016-10-19 19:22:52 +08:00
@fangjinmin 嗯,就是你说的这种格式的,我现在用私钥加密后,再用配对的公钥解密,发现问题没有问题,现在开始怀疑 base64 有问题了……好尴尬……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313805

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX