我前段时间接受过加密课程,而且我没有长时间使用这些知识。我无法找到解决问题的方法。我想使用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))
在明文行中,我收到错误:
密文长度必须等于密钥大小。
我不知道该如何处理...我尝试混合其他加密软件包,例如pyOpenSSL或jsencrypt,我总是得到上面的错误。
请帮忙。感谢您提前提出的所有意见。