Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用公钥对消息进行编码,并在python中使用私钥对其进行解码_Javascript_Python_Encryption - Fatal编程技术网

在javascript中使用公钥对消息进行编码,并在python中使用私钥对其进行解码

在javascript中使用公钥对消息进行编码,并在python中使用私钥对其进行解码,javascript,python,encryption,Javascript,Python,Encryption,不久前我上过密码学课,但我没有太长时间使用这些知识。我找不到解决我问题的办法。我想使用JavaScript用公钥加密用户以html形式给出的密码。然后我想在后端用python使用私钥解码密码 我使用Python中的包生成了私钥和公钥。这是我的代码: from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa from crypt

不久前我上过密码学课,但我没有太长时间使用这些知识。我找不到解决我问题的办法。我想使用JavaScript用公钥加密用户以html形式给出的密码。然后我想在后端用python使用私钥解码密码

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

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私钥----- MIICXAIBAKBGQC/IMA04ASBUSVTCSM9KVDZE7ISEEPFZKTKGVP8S4QUDN2 gh9nL+/8+J1SKBRLTMWDRXBYQDI36EYYQPRG9RACY6VXJI4NHEHRTLDAULXYAE hnAvOEnCEqeKHmbcTsnilJRJfcf7ecFxwmrGBLQ4i1YLOWR/9NDXlox0/QIDAQAB AoGAVD0weLFzRpvK7ooiC+2guMU/3NiZMe6bH93b0xealIEW86fPH8S0uPYdTx2s WxCmW7bvSGA9vKA0XxW8farO5v7lxc4VJkefPuTeJo+oJ1+jV5VCTnQsgAjrXieP T4MtxO6U77xUnyWlWDAdvWbc+LREVPMRU77SHDVYJ7ZXCAUQQDUK/7gAHhMgAC8 ZCK6XHOAFLYHH1HL5/Ynqb885p/l/CJNVI3IMASLOPMJ4AAV15IZSC6DI0JMRDU njZBABmDAkEAzYcOBEwX/dDlffcsYFNKKYrUpTK09pMuYqLO5RabGNMEUW//EVAc +QnyCht0eJaZL93NM5KWHGpY57BFhtBvfwJAOL/hX50dAG1uP2G+VQBvRPDfF+ie 4VAK2DHP012TPD4KN/NJ7GN4UQOI4EWAJTPZASK8VC4MNSFV94CZJSWJAKXR4 +YBSH7WulzzallDLWD9LM03MHW1MFZWO1 5G6ANPCIKXPDN+WLWJBAJFXD2HFZFBUFQM9XPQ6GKOHMYOK7Y1IQ+E+BO/WzEu的QUCH8ZGPE2WDOZYCHG5DOPVNMC6 IMos+RRGH88YWDNDDAJP7KSRCIV5xOhms93Minwdhvy8=
-----结束RSA私钥-----

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

migfma0gcsqgsib3dqebaqa4gnadcbiqkbgqdklspl01zewmbm+LCs+aht98tspzg0fqnfvvv1mejhrjsmp44bgkelqplnutkmknwjztx2wuypoymndqfvce1xb/6634x3FDmrdkv6QBWXn5TI+wq1axxv7nsglizaxxyxbxxdql7mkkaeqnmq8zzueux5w9ec8pwgrigaqab

我将公钥传递给javascript,并使用以下代码对html表单中编写的一些密码进行编码:

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

A8FE4LUHPTIICN86B8CD5MHE7RPXKYNCT5YZMH5QVWJUT3U7VIGWW/OJMOJ3TrHcTvBe2WynkZuJJJLFDQ9NYTDHF05DJA2Y4YOIEYONOBDE0KMFEPLNTNNGR0VU0VU0LSDSMWGxx+RPIFS2OQ3NQAVIQ+YLIKWQGWVUUS/8SQKZFJJQQLcJJU7P59EO6X6TXUST1WA93UUIVOBFXC?OHAFX4K4FRFZ4K4FRU4FRUKZ4KZ4J0LZ0KZ0LZ0LZ0LKH7N+H7H7H=

我将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))
在纯文本行中,我收到错误:

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

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


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

cryptico
不仅仅是一种非对称加密。它实际上生成一个AES密钥,使用该密钥对称加密数据,然后通过RSA()加密AES密钥。因此,仅仅在Python端调用decrypt是不够的,您需要确定序列化格式(这将让您获得RSA加密的负载、对称负载的初始化向量以及对称负载本身)和RSA加密填充。谢谢您的评论。根据您所写的内容,我想我的错误在于我简单地使用了“private_key.decrypt(self.password,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),algorithm=hashes.SHA1(),label=None))”。然后我应该检查我必须在那里使用什么填充来正确响应cryptico所做的事情,对吗?我来看看。然而,我在密码学方面不是很好,我不知道在哪里可以找到它。我希望您能给我一些提示。
cryptico
不仅仅是一种非对称加密。它实际上生成一个AES密钥,使用该密钥对称加密数据,然后通过RSA()加密AES密钥。因此,仅仅在Python端调用decrypt是不够的,您需要确定序列化格式(这将让您获得RSA加密的负载、对称负载的初始化向量以及对称负载本身)和RSA加密填充。谢谢您的评论。根据您所写的内容,我想我的错误在于我简单地使用了“private_key.decrypt(self.password,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA1()),algorithm=hashes.SHA1(),label=None))”。然后我应该检查我必须在那里使用什么填充来正确响应cryptico所做的事情,对吗?我来看看。然而,我在密码学方面不是很好,我不知道在哪里可以找到它。我希望你能给我一些提示。
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))