在javascript中用publickey编码消息,在python中用privatekey解码

2024-10-03 19:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

不久前我上过密码学课,我没有用这些知识太久。我找不到解决问题的办法。我想用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

私钥如下所示:

-----BEGIN RSA PRIVATE KEY----- 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 PRIVATE KEY-----

公钥如下所示(pubKeySerial变量):

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkLspl01zeWMBm+LCs+AhT98TSpzg0fqnfvnVv1mejHRJsMP44BgkElQPLnUTKmKNWjZtx2wuYPOymNdqfVCe1XB/6634x3FDmrdkv6QBWXn5TI+WQ1AXxV7NsglIzaxNkYxBXdPGQl7MKkaEQnMq8zZeJueUx5W9Ec8pwGrigawIDAQAB

我将公钥传递给javascript,并用cryptico对一些以html形式编写的密码进行编码:

^{pr2}$

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

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

我通过了加密.cipher的值。加密.cipher值在中自我密码以下代码中的变量:

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))

明文行中,我收到错误:

Ciphertext length must be equal to key size.

我不知道该怎么办。。。我尝试混合使用其他加密软件包,如pyOpenSSL或{a4},我总是得到上面的错误。在

请帮忙。提前感谢您的所有评论。在


Tags: key代码fromimportbackend密码serializationprivate