V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
harry890829
V2EX  ›  问与答

openssl rsa 加密问题

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

    现需要向后端发送报文, 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   ·   实用小工具   ·   6008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:21 · PVG 10:21 · LAX 18:21 · JFK 21:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.