使用javascript中的publickey对消息进行编码,并使用python中的privatekey对其进行解码

时间:2016-03-24 21:22:47

标签: javascript python encryption

我前段时间接受过加密课程,而且我没有长时间使用这些知识。我无法找到解决问题的方法。我想使用JavaScript使用公钥以html格式加密用户提供的密码。然后我想用python使用私钥解码后端的密码。

我在Python中使用cryptography包生成私钥和公钥。这是我的代码:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(public_exponent=65537, key_size=1024, backend=default_backend())
public_key = private_key.public_key()
tmp = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
pubKeySerial = tmp
pubKeySerial = ""
for pLine in tmp.splitlines(): 
    if("---" not in pLine):
        pubKeySerial = pubKeySerial + pLine

私钥看起来像这样:

  

-----开始RSA私钥-----   MIICXAIBAAKBgQC / imA04asbusVtcSsM9KVdZE7ISeEPfzktIxtkGgVP8S4qUdN2 gh9nL + / 8 + J1SKBrltmWDRxByqdi36EyyqPRg9rAcY6VXJI4nHEiHHrtLdAUlxyAe   hnAvOEnCEqeKHmbcTsnilJRJfcf7ecFxwmrGBLQ4i1YLOWR / 9NDXlox0 / QIDAQAB   AoGAVD0weLFzRpvK7ooiC + 2guMU / 3NiZMe6bH93b0xealIEW86fPH8S0uPYdTx2s   WxCmW7bvSGA9vKA0XxW8farO5v7lxc4VJkefPuTeJo + OJ1 + jV5VCTnQsgAjrXieP   T4MtxO6U77xUnyWlWDAdvWbc + LreVpmru77SHDVYJ7ZxcaUCQQDuk / 7gAHhMgAC8   ZCK6XhoAfrYhh1hl5 / Ynqb885p / L / cjnvi3cImaslOpmJ4aav15iZSC6Di0jmrDU   njZBABmDAkEAzYcOBEwX / dDlffcsYFNKKYrUpTK09pMuYqLO5RabGNMEUW //的EVAc   + QnyCht0eJaZL93NM5KWHGpY57BFhtBvfwJAOL / hX50dAG1uP2G + VQBvRPDfF + ie 4Vak2dhp0e212Tpd4Kn / NJ7GN4UQoI4EWajtpZASkc8vc4mnSFv94cZJSwJAKxR4   + quch8ZGpE2wDozGychg5DOpvNmC6ofnyBsh7WUlzZAlLdLWD9lm03mHw1MFzwO1 5G6AanpcIkxPdn + wLwJBAJFXD2HfzFBuFqM9XPq6GKOHomyok7y1iQ + E + BO / WzEu   IMOS + RRGH88YwdndajP7ksRCiv5xOhmS93mINwdhVy8 =
  ----- END RSA私钥-----

公钥看起来像那样( pubKeySerial 变量):

  

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkLspl01zeWMBm +的LC + AhT98TSpzg0fqnfvnVv1mejHRJsMP44BgkElQPLnUTKmKNWjZtx2wuYPOymNdqfVCe1XB / 6634x3FDmrdkv6QBWXn5TI + WQ1AXxV7NsglIzaxNkYxBXdPGQl7MKkaEQnMq8zZeJueUx5W9Ec8pwGrigawIDAQAB

我将公钥传递给javascript并使用cryptico编码以html格式编写的密码:

var encrypted = cryptico.encrypt(password, publicKey);

密码只是一个单词。 publicKey 与上面写的 pubKeySerial 变量具有完全相同的值。在上面的代码之后,对于密码 mypassword encrypted.cipher 变量取值:

  

A8fe4LUhPTIIcN86B8Cd5mHe7RpXKyNCT5yzMh5qvwjuT3u7m7VIGWW / OjMoJ3uzE6tRHCTvBE2WyNKZujJLfdQ9nYTdhf05dja2y4yoIeyNObDe0KMfePlNtnnGR0vu0LSdSmwGxx + RPifs2OQ3NQaPVIq + YliROKUQGwKvvUUs / 8SqkZFjQbQlcJu7p5X9Eo6X6TxUsT1WA93UUIVobfXC?oh4aFfA4xRuHDPOlz1HW3dibQg5cUMZ + 4N + HSH7h9sY =

我将 encrypted.cipher 值传递给后端的python。 encrypted.cipher 值位于以下代码中的 self.password 变量中:

from settings import private_key
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
plaintext = private_key.decrypt(self.password, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()), algorithm=hashes.SHA1(), label=None))

明文行中,我收到错误:

  

密文长度必须等于密钥大小。

我不知道该如何处理...我尝试混合其他加密软件包,例如pyOpenSSLjsencrypt,我总是得到上面的错误。

请帮忙。感谢您提前提出的所有意见。

0 个答案:

没有答案