openssl rsa 加密问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
harry890829
V2EX    问与答

openssl rsa 加密问题

  •  
  •   harry890829 2016-10-19 11:31:35 +08:00 2891 次点击
    这是一个创建于 3286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现需要向后端发送报文, 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 使用中,我有什么地方没有注意到么?

    第 1 条附言    2016-10-20 09:36:56 +08:00

    这边记录一下吧,在调试完成openssl中rsa加密模块后发现python代码内部执行的情况(未证实,晚点去查阅资料)

    以下为猜测内容:

    这段代码中,domain.key为私钥,python利用私钥产生了公钥,然后使用公钥加密的字符串。

    以上猜想来自于在使用openssl加密时,我直接利用私钥加密发送给后台,后台无法解析,于是使用公钥尝试,返回成功


    反省:

    1.这次rsa加密中,我竟然没有想到一个问题……后台给我了私钥,我可以利用私钥产生公钥……之前都是在盲目的乱试了……

    2.对后台说给我私钥的意思应该是最高权限都给你了,随便搞吧,我理解成了就用私钥弄就行了,还是对这类东西不了解,还需要多学习啊


    多谢大家的帮助

    9 条回复    2016-10-19 19:22:52 +08:00
    jugelizi
        1
    jugelizi  
       2016-10-19 11:43:17 +08:00   1
    http post 方法 后端发送报文

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

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

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

    http://main.xfiddle.com/87218f9d/rsa_encryption.php
    代码在这里: http://main.xfiddle.com/87218f9d/rsa_encryption.txt
    wy315700
        5
    wy315700  
       2016-10-19 15:25:13 +08:00   1
    @shiji 私钥是签名吧,不能加密吧
    yangff
        6
    yangff  
       2016-10-19 15:27:29 +08:00   1
    @wy315700 显然可以……
    shiji
        7
    shiji  
       2016-10-19 15:56:05 +08:00   1
    @wy315700 RSA 的私钥是公钥的亲爹啊,公钥能做的私钥都能做, 而且公钥丢了能直接通过私钥恢复出来。
    fangjinmin
        8
    fangjinmin  
       2016-10-19 17:27:47 +08:00   1
    首先要搞清楚, 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
        9
    harry890829  
    OP
       2016-10-19 19:22:52 +08:00
    @fangjinmin 嗯,就是你说的这种格式的,我现在用私钥加密后,再用配对的公钥解密,发现问题没有问题,现在开始怀疑 base64 有问题了……好尴尬……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:16 PVG 03:16 LAX 12:16 JFK 15:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86