• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cevincheung
V2EX  ›  程序员

为啥 rsa 这种算法扩展 php/python 不自带。而且跨平台也不是处理的很好

  •  
  •   cevincheung ·
    cevin · Mar 28, 2014 · 4497 views
    This topic created in 4453 days ago, the information mentioned may be changed or developed.
    11 replies    1970-01-01 08:00:00 +08:00
    zhouzm
        1
    zhouzm  
       Mar 28, 2014
    前半个问题估计是涉及到法律方面
    cevincheung
        2
    cevincheung  
    OP
       Mar 28, 2014
    @zhouzm 呃,rsa是商业算法么?
    dorentus
        3
    dorentus  
       Mar 28, 2014
    这么复杂的东西难度拿出来不是挺正常的么
    cevincheung
        4
    cevincheung  
    OP
       Mar 28, 2014
    @dorentus 呃,那有没有一个可自由安装卸载的系统化扩展?php比如ext?没有啊 - -#。python是啥?
    wy315700
        5
    wy315700  
       Mar 28, 2014
    RSA是商业算法

    虽然算法和原理是开放的
    dorentus
        6
    dorentus  
       Mar 28, 2014
    python 我不熟,不过可以搜到这个: https://pypi.python.org/pypi/rsa
    pip install rsa 就能用了吧。

    PHP 是有的吧,用的 openssl。http://www.php.net/manual/en/function.openssl-pkey-new.php
    wwqgtxx
        7
    wwqgtxx  
       Mar 28, 2014 via Android
    pycrypto/m2crypto都可以试试pypi上有
    大概是因为授权协议的问题吧
    反正java自带了
    xierch
        8
    xierch  
       Mar 28, 2014
    010blue
        9
    010blue  
       Mar 28, 2014
    RSA是比较耗时的,如果仅用php或python在语言层实现效率太慢,尤其是生成公/私钥的时候,所以一般都是使用系统的openssl来生成key,然后代码来实现加/解密,这个通常也是要依赖扩展(比如php需要高精度函数扩展bcmath,python的没使用过)。
    @cevincheung
    sneezry
        10
    sneezry  
       Mar 28, 2014
    rsa有专利。
    txlty
        11
    txlty  
       Mar 29, 2014   ❤️ 1
    五年前,从php 4开始就自带了。而且跨平台没问题。
    linux下默认支持。win下,编辑php.ini把extension=php_openssl.dll 打开。

    测试代码:
    <?php
    function pubEncrypt($data,$pubKey){ //公钥加密
    $pubKey = openssl_pkey_get_public($pubKey);
    openssl_public_encrypt($data, $encrypted, $pubKey);
    return base64_encode($encrypted);
    }
    function privDecrypt($data,$privKey){ //私钥解密
    $privKey=openssl_pkey_get_private($privKey);
    $encrypted = base64_decode($data);
    openssl_private_decrypt($encrypted, $decrypted, $privKey);
    return $decrypted;
    }

    $pubKey="-----BEGIN PUBLIC KEY-----
    MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANSlDRoxEXWQrbIbFig3SuT/YH/K0q5/
    OLBVloeXSr+dc+PWvXsRnwkxIkX5KznPCG9zLGe/Ga9XRyp+k2YrnrsCAwEAAQ==
    -----END PUBLIC KEY-----"; //公钥
    $privKey="-----BEGIN RSA PRIVATE KEY-----
    MIIBOQIBAAJBANSlDRoxEXWQrbIbFig3SuT/YH/K0q5/OLBVloeXSr+dc+PWvXsR
    nwkxIkX5KznPCG9zLGe/Ga9XRyp+k2YrnrsCAwEAAQJACg70m7SOet0pGi+l0Kks
    5cAetGzHonFqIQ0rXaaOZpnZ7VeBTjklFVlVv/6UGr0h7jLclU+0UcEZ1lxwQUBx
    wQIhAPoD6k+WOJld9D0p6ECLlS0ii4spj/T5o5ODdI+pkS2JAiEA2bwhZICOwb8w
    FjfJOoKFcfuUfTk0n8y1DokfRQBC/SMCIBoZ8opgioQodOk1yNOEPwy5QIxEyIyw
    y00JOlANSeTRAiBm+oeAlRzvnZEMsQ3HUnvy0N4F68xr19G6MjhL1jfYqQIgGiYa
    RlI1jeOWFLKyxOFcNim8HUhfqIebm8Mccc0/3kQ=
    -----END RSA PRIVATE KEY-----"; //私钥

    $string='一二三四五六七八九十';
    echo '公钥加密:';
    $en = pubEncrypt($string,$pubKey);
    echo $en . '<br /> 私钥解密:';
    $de = privDecrypt($en,$privKey);
    echo $de;
    ?>

    毫无问题~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1236 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 17:47 · PVG 01:47 · LAX 10:47 · JFK 13:47
    ♥ Do have faith in what you're doing.