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

5

我使用JS RSA库(http://www-cs-students.stanford.edu/~tjw/jsbn/)对明文进行加密,然后使用Python Crypto.PublicKey对其进行解密。

但是当我使用Python解密JS的密文时,其中包含有无意义的文本。我不知道它们是为什么。

因此,我想要得到不含有无意义文本(例如:test)的清晰文本。

步骤

  1. Make key pairs in Python.

    key = RSA.generate(1024) #(publicKey, privateKey)
    
  2. Save modulus, exponent in JS and Encrypt "test"

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

    result(hex string): d0ab7e22f92adcca7182e3c622b513382d163033df5ca0f3c0327e8a1774258800ae57dfc98522f5ed40a4bed2f4b54f46ea800ff1ef522b104b0f874a598f6bbcf5453506f8bf2f8aa3b04b0c73f0018564707304b3a059326d51945d3ff0282d63c2c4c1ea6ba5a2172af83ef8bdc1d104a8d67ba95ee97ab89b36cd5c34d4

  3. Decrypt using PrivateKey in Python

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

    result: \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\x7f\xc9\x12\xd0\x94\xd2jS\xee\x83\xfda\xc6\xc7d\xdd\x0b2\xe6\x1d\x84\x0c\x93\x8aK\xc2\x10U\xc0Y~\xbf\x15\xfa\x00test


你期望得到什么? - Padraic Cunningham
@ArtjomB。没错。我想要清晰的解密文本,不含虚拟数据。 - yumere
2个回答

4

pycrypto 的 rsa decrypt() 方法是一个低级方法,因此您会得到预期的输出,即 PKCS#1,版本 1.5,块类型 2 的字节数组。如果您认为这不方便,则应该遵循 API 文档中的建议,而使用 PKCS1_v1_5 模块


1
哦...太好了。非常感谢。 - yumere

0

我一直在使用JSEncrypt JavaScript文件,使用pycrypto实现JavaScript和Python之间的对话。然而,在JavaScript中进行加密时,它在函数pkcs1pad2中使用了一个随机填充,需要将其删除才能正常工作。这是一个hack,但它起作用了。以下是从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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接