有关于 PHP RSA 公钥加密的实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sjlleo
V2EX    程序员

有关于 PHP RSA 公钥加密的实现

  •  
  •   sjlleo
    sjlleo 2020-02-27 18:50:23 +08:00 3045 次点击
    这是一个创建于 2141 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想用 PHP 模拟登陆一个网站练手,但在Javascript中发现了如下RSA 公钥加密function

    function userLogin() { var password = $("#password").val(); if(password.length != 256){ setMaxDigits(131); var key = new RSAKeyPair("010001", '', "00b15fdee0d7ed06c21067d59e65031becca4c3eafe52d891725c75c37dac7ca2d"); var enpwd = encodeURIComponent(password); var result = encryptedString(key, password); $("#password").val(result); } 

    Google 了一下,都用到了 OpenSSL,我试着用 PHP 写了

    function rsa_encode($content) { $public_key = "-----BEGIN PUBLIC KEY-----\n00b15fdee0d7ed06c21067d59e65031becca4c3eafe52d891725c75c37dac7ca2d\n-----END PUBLIC KEY-----"; $openssl_public_encrypt = openssl_public_encrypt($str, $content, $public_key); if (!$openssl_public_encrypt) throw new \Exception('openssl_public_encrypt failed! '); return $content; } 

    提示“RSA 公钥不正确”,后来又去搜了一下,这样合成的 public_key 不符合 PKCS 标准,不知道下一步应该如何操作,感谢!

    10 条回复    2020-02-27 21:09:02 +08:00
    areless
        1
    areless  
       2020-02-27 19:00:34 +08:00 via Android
    先得用公钥创建资源句柄~ openssl_pkey_get_public
    sjlleo
        2
    sjlleo  
    OP
       2020-02-27 19:16:56 +08:00
    @areless
    感谢,我刚刚尝试这么做了
    ```PHP
    function rsa_encode($data)
    {

    $public_key = "-----BEGIN PUBLIC KEY-----\n00b15fdee0d7ed06c21067d59e65031becca4c3eafe52d891725c75c37dac7ca2d\n-----END PUBLIC KEY-----";
    $key = openssl_pkey_get_public ($rsa_public);
    $result = str_split ($data , 117);

    $str = '';
    foreach ($result as $v) {
    openssl_public_encrypt ($v , $crypted , $key);
    $str .= $crypted;
    }


    if (! $str) {
    throw new \Exception ('Failded RSA Check');
    }
    }
    ```
    但是它提示
    ```
    Warning: openssl_public_encrypt(): key parameter is not a valid public key in /demo/rsa.php on line 12

    Fatal error: Uncaught Exception: Failded RSA Check in /demo/rsa.php:16 Stack trace: #0 /demo/rsa.php(38): rsa_encode() #1 {main} thrown in /demo/rsa.php on line 16
    ```
    RickyC
        3
    RickyC  
       2020-02-27 19:29:50 +08:00
    https://blog.class4ever.com/1740.html

    加密解密, 我找到这种写法. 这个可以运行
    areless
        4
    areless  
       2020-02-27 19:32:00 +08:00 via Android   1
    @sjlleo 这个是 16 进制转过的公钥,先把公钥还原出来。好像用的是这个 http://www.ohdave.com/rsa/
    RickyC
        5
    RickyC  
       2020-02-27 19:33:43 +08:00
    你这个 公钥放在函数里, 换行的时候, 会不会默认添加了一些空格, 以至于格式不正确?
    areless
        6
    areless  
       2020-02-27 19:51:05 +08:00 via Android
    @sjlleo 公钥 16 进制转字符串,然后填充方式一致便可以了。
    sjlleo
        7
    sjlleo  
    OP
       2020-02-27 20:18:13 +08:00
    @areless
    00b15fdee0d7ed06c21067d59e65031becca4c3eafe52d891725c75c37dac7ca2d 解密后是 skhN61Jj6UYfdPlzh0a9EareSj8viurcHR8CgKxl3coFds1B6+tShOFHvduTcJVMlE38ToF0e1ZoxnmGYhm4uNKyB5sr6vpQsl61/TERMydYmV0PHFYbvLxQCx//OenJWNYyh+H8gT+eQX1+gUTH6CBNUSqdRQKtHhr15ZUQxnQDttmS0Da8fNfBjZ9GGejl12x3zYHstfG3Djz8Z4Iir1FVMEKzMn9GJRhSeTGtVW8u/3NbPXIhM29Z7QVrTQK6f2/H+uF/rpH1bZRn86mzEM/7qwD1+NEN0jm3h+uS7hMmQ/qA5egIebFVe9EsUkXuDwl8CBR2M4utroxz+E6shA==,但是放入后依旧提示公钥不可用诶。
    sjlleo
        8
    sjlleo  
    OP
       2020-02-27 20:19:34 +08:00
    @RickyC 不会,换行我都是使用了“\n”的,空格我也仔细检查过了。
    RickyC
        9
    RickyC  
       2020-02-27 20:29:36 +08:00
    @sjlleo 你这个公钥哪里来的? 怎么这么短, 其中还不包含大写字母?
    areless
        10
    areless  
       2020-02-27 21:09:02 +08:00
    @sjlleo 指数 模数还原公钥。这次肯定行。=___=
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1445 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 16:52 PVG 00:52 LAX 08:52 JFK 11:52
    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