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

2014-03-28 16:42:09 +08:00
 cevincheung
4023 次点击
所在节点    程序员
11 条回复
zhouzm
2014-03-28 16:47:55 +08:00
前半个问题估计是涉及到法律方面
cevincheung
2014-03-28 17:16:31 +08:00
@zhouzm 呃,rsa是商业算法么?
dorentus
2014-03-28 19:45:47 +08:00
这么复杂的东西难度拿出来不是挺正常的么
cevincheung
2014-03-28 20:15:18 +08:00
@dorentus 呃,那有没有一个可自由安装卸载的系统化扩展?php比如ext?没有啊 - -#。python是啥?
wy315700
2014-03-28 20:19:48 +08:00
RSA是商业算法

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

PHP 是有的吧,用的 openssl。http://www.php.net/manual/en/function.openssl-pkey-new.php
wwqgtxx
2014-03-28 20:59:47 +08:00
pycrypto/m2crypto都可以试试pypi上有
大概是因为授权协议的问题吧
反正java自带了
xierch
2014-03-28 22:25:29 +08:00
010blue
2014-03-28 22:49:12 +08:00
RSA是比较耗时的,如果仅用php或python在语言层实现效率太慢,尤其是生成公/私钥的时候,所以一般都是使用系统的openssl来生成key,然后代码来实现加/解密,这个通常也是要依赖扩展(比如php需要高精度函数扩展bcmath,python的没使用过)。
@cevincheung
sneezry
2014-03-28 23:17:50 +08:00
rsa有专利。
txlty
2014-03-29 22:30:36 +08:00
五年前,从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;
?>

毫无问题~

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

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

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

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

© 2021 V2EX