JS和Python之间的RSA加密和解密(pycrypto)

时间:2015-03-01 11:25:04

标签: javascript python rsa pycrypto jsbn

我从JS RSA库(http://www-cs-students.stanford.edu/~tjw/jsbn/)加密纯文本,并从python,Crypto.PublicKey解密。

但是,当我用JS解密来自JS的密文时,它有虚拟文本。我不知道他们为什么会这样。

所以,我想要一个没有假的明文。(例如测试)

步骤

  1. 在Python中创建密钥对。

    key = RSA.generate(1024) #(publicKey, privateKey)
    
  2. 保存JS中的模数,指数和加密“test”

    var rsa = new RSAKey();
    rsa.setPublic(modulus, exponent); //modulus and exponent hex string
    rsa.encrypt("test");
    

    结果(十六进制字符串):d0ab7e22f92adcca7182e3c622b513382d163033df5ca0f3c0327e8a1774258800ae57dfc98522f5ed40a4bed2f4b54f46ea800ff1ef522b104b0f874a598f6bbcf5453506f8bf2f8aa3b04b0c73f0018564707304b3a059326d51945d3ff0282d63c2c4c1ea6ba5a2172af83ef8bdc1d104a8d67ba95ee97ab89b36cd5c34d4

  3. 在Python中使用PrivateKey解密

    key.decrypt(above_result.decode('hex'))
    

    结果:\ x02 \ xf0 \ xae \ xafK \ xd3 \ x17 \ xfc \ xf4 \ xd6 \ xd9 = \ xee7 \ x04 \ x94 \ xea \ x9c \ xd8 \ xf7 - \ x19 \ x05 $!'# \ XAD \ X82' \ xfcKG \ xadK \ xb6_ \ xabMZ:\ x9dU \ XA4 \ XC0 [\ x8c \ xa6hC \ X93 \ XF7 \ XBC \ XF1:\ x9f \ x107D \ xe8 \ XFE \ x07R \ x8c \ XD7 \ XB3 \ XE6 \ XC6 \ XCF ^ \ X92 \ XA2 \ xe2X \ XE4 \ XAF | \ x8aS \ XFE \ XD3 \ X84)\ XC3 \ X82 \ XDC \ XD1 \ 0x7F部分\ xc9 \ X12 \ XD0 \ X94 \ xd2jS \ XEE \ X83 \ xfda \ XC6 \ xc7d \ XDD \ x0b2 \ XE6 \ X1D \ X84 \ X0C \ X93 \ x8aK \ XC2 \ x10U \ xc0Y〜\ XBF \ X15 \ XFA \ X00的测试

2 个答案:

答案 0 :(得分:3)

pycrypto rsa decrypt()方法是一种低级方法,因此您获得了预期的输出,PKCS#1,版本1.5,块类型2字节数组。由于您似乎发现不方便,因此您应该使用advice in the API docs,而是使用PKCS1_v1_5 module

答案 1 :(得分:0)

我一直在使用JSEncrypt JavaScript文件来使用pycrypto实现JavaScript和Python之间的对话,但是在JavaScript加密期间,它在函数pkcs1pad2中使用了一个需要删除的随机数据块它开始工作了。这是一个黑客,但它成功了。以下是从function pkcs1pad2(s,n)

注释掉的行
 while(n > 2) { // random non-zero pad
    x[0] = 0;
    while(x[0] == 0) rng.nextBytes(x);
    ba[--n] = x[0];
  }

  ba[--n] = 2;
  ba[--n] = 0;