python3 rsa加密

google了好久还是没懂。。都是生成随机的公钥。

js版本的原代码是这样的

var exponent='110001'
var modulus='008d74da20e11ca5646fe8581372f7179382a66ce20913ab753bc4c10ccf2ac53393cbcd12d6108940fbd84913df29ba1867b3a5eacd00fece324216476ab70b5ff943776955ad4d56851258b0718192a21b649560c6b21364ec7989cc378'
var publicKey = RSAUtils.getKeyPair(exponent, '', modulus);
RSAUtils.encryptedString(publicKey, param);

如何以python3的代码实现?

顺便还有一个问题,在安装pycrypto的时候提示

warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.

,google的解决办法是

apt-get install python3-dev

但是并没有效果,依然如此报错,环境是ubuntu14.04

十分感谢

rsa的js代码在此gist

阅读 9.5k
3 个回答

以你现在提供的信息 无法验证你的问题,"RSAUtils.getKeyPair"这是它js自己封装的一个方法,这个方法做了什么不得而知,你应该用它测试加密一段字符串出来。
对于pycrypto可以参考这篇文章 http://stackoverflow.com/ques...

我试了下这份js,得到了加密后的字符 然后用我的程序验证结果不一样。可能这不是一份标准的rsa加密,或许你需要将这份js放到js问题区里,让懂js的人帮你解读它

var exponent='110001'
var modulus='008d74da20e11ca5646fe8581372f7179382a66ce20913ab753bc4c10ccf2ac53393cbcd12d6108940fbd84913df29ba1867b3a5eacd00fece324216476ab70b5ff943776955ad4d56851258b0718192a21b649560c6b21364ec7989cc378'
var publicKey = RSAUtils.getKeyPair(exponent, '', modulus);
publicKey
RSAKeyPair {e: $w.BigInt, d: $w.BigInt, m: $w.BigInt, chunkSize: 92, radix: 16…}
RSAUtils.encryptedString(publicKey, 'a');
"016ea138c1797c81a9b8456eff08a7ce7992f0e6cd2747c40010cec34e49cc57a6838e73c110db4b97c33ce047bcb90b80d07610f68f5cbcdd26dcac82889e4d65617e26206780b8b9bb27b0266656c25c4d1b10cd44216295a64f637561"

垃圾百度,屁用没有,都是复制粘贴,大家都找不到这个解密,上stackoverflowz找

如果加密不正确,说明RSAKeyPair内部有一个对公匙n进行2次解密函数
下面的github项目rsa.js的RSAKeyPair下就有一个function r(n)的2次加密函数

对了有些RSAUtils库好像是有问题的,每次加密后的密文都一样,可以考虑用下面gayhub中的rsa.js替代

完整rsa签名认证例子
https://github.com/crud-boy/p...

JavaScript代码

e = '010001'
n = '85ec922f28cc33e35b78461cb69aac204d576f14b41f6431f0503f4c0e1d617166ceb475b4124b46d72006cc1955a422492572282aaa6b7b6c20f039a1c834bcc75e1212688eb35d6e990d9b8ebe720eed724870cfcd8498f7983cac696a9132d06a908eee010ebd26ad1aab2bedea4af77eb2905a251f078c59fa958205f491'
setMaxDigits(129)
p = new RSAKeyPair(e, '', n)
console.log(encryptedString(p, '789789'))

python代码

e = '010001'
e = int(e, 16)
n = '85ec922f28cc33e35b78461cb69aac204d576f14b41f6431f0503f4c0e1d617166ceb475b4124b46d72006cc1955a422492572282aaa6b7b6c20f039a1c834bcc75e1212688eb35d6e990d9b8ebe720eed724870cfcd8498f7983cac696a9132d06a908eee010ebd26ad1aab2bedea4af77eb2905a251f078c59fa958205f491'
n = int(n, 16)

pub_key = rsa.PublicKey(e=e, n=n)
m = rsa.encrypt('789789'.encode(),pub_key)
print(m.hex())
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题