首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python解密用jsencrypt加密的文本

python解密用jsencrypt加密的文本
EN

Stack Overflow用户
提问于 2016-03-25 23:25:23
回答 1查看 516关注 0票数 1

在web表单中,答案(打包在jsonstring中)分几个步骤进行加密。首先,生成一个随机密钥。其次,随机密钥用于jsonstring的AES加密。随机密钥也是加密的。两者都是在邮件正文中发送的。

代码语言:javascript
复制
        // Generate Random key
        var rand_key = ('0000' + Math.random().toString(36).replace('.', '')).substr(-10);
        console.log('rand_key', rand_key)
        //var pubkey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALDjeFwFNhMCjMwcRVVKG1VvfsntEVPR3lNTujJnNk1+iSqZ4Tl5Lwq9GbwO+qlYVwXHNmeqG7rkEhL9uyDIZVECAwEAAQ=="
        // rsa_key_public07012016.bin
        //var pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCv8FVei4Q2ehmYsSCv/uODSojIOGHwfQe686S1cEH5i/1mGME5ZzNqyy0d+lhMRD0tr7Sje7JoCEC/XRIZaiKJjpl1+3RXotf/Cx3bd9H7WtitshZB1m38ZZFsrX4oigMpUPFbCefMeBS4hvvNnmtl08lQGhfIXdXeflZsgWRHtQIDAQAB";
        // my_pub_key.pem
        var pubkey ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA38gtENP9/hpirSCIsPh6CAVm0UmME4XBlPyK8yhwk079EUJpNzlEhu9HKcA/B7Fxo2lNoY9Tb9e+PYtJ6+VOB4+Y6zgGMX7cchYmumKRTbbQ6FNfBE5Q8XnOAUlgC7gNrs0e5lW7JH1kWlK+eTT4TANT7F3US09aXmym+fZaRInbXmJujGnDIbRIIbzr5FE82EeMpw2TqRWV466wz5EeFWSSQ8EqV1pSox8B1ywb6cnB/Vofs2qR9Zf2efi9TMcSGm/ij/p9IZcbLeep9qfGsv29lbLNMfwNwQyH0JU27eAM4tPdirceZPxfD6iiILmKzN253BMoAeQCp6us53CnGQIDAQAB"
        // Make form_data a JSON string
        var jsonstring = JSON.stringify(form_data);
        // Create AES encrypted object
        var aes_encrypted_json = CryptoJS.AES.encrypt(jsonstring, rand_key);
        // Encrypt rand_key
        var encrypt = new JSEncrypt();
        //console.log('encrypt obj', encrypt);
        encrypt.setPublicKey(pubkey);
        var encrypted_rand_key = encrypt.encrypt(rand_key);
        //var encrypted = encrypt.encrypt(jsonstring);
        console.log('encypted', encrypted_rand_key);
        var mail_body = encrypted_rand_key + aes_encrypted_json
        console.log('body', mail_body)
        var mailto_string = "mailto:info@xyz.com?subject=FORM&body=" + encodeURIComponent(mail_body);
        $('#mailtosend').attr('href', mailto_string);

在收件人邮件服务器端,我希望使用私钥和pycryptodome包对随机生成的密钥和jsonstring进行解密。

代码语言:javascript
复制
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from base64 import *

def decrypt(key, text):
    if type(key) == str:
        key = key.encode()
    if type(text) == str:
        text = text.encode()

    rsakey = RSA.importKey(key)
    rsakey = PKCS1_v1_5.new(rsakey)
    d = rsakey.decrypt(text, 'bolloux')
    return d

# rand_key am2mhiwwmi
text = "ZvcrluUmZLY3lRRw01W9mQnhMn7zzpIWn1Bo3csM/ZZ0pWY/8H2dCB9fZDi9/cmp0UtIqDXhLd7SIwyxqrFgPcHUuEHlZl0WQcjSty8PjadG2Abulk1XqEQV4u0Gb/bFGDBMcf5tV1G0d4FFcBPE8r8inrxUjSj2CSffVL8gIGq3ZfY5g7t5FOZV8npBCEONgOLKYnzIiHrHUuXWsOaMAqxMFOLd5DTDLKAkyMybDClsLW9ka+CvWd5fnZBCvO2ziehFp7b9PG4QPSnQpdC8jNLGZB2h0FI8YQD6IyUwmVluUbAlPMqwd6A2CBdGCbfbMChaA5R7bJgKkYhPOQTjaQ=="
text = b64decode(text.encode())

with open('my_priv_key.pem', 'rb') as f:
    key = f.read()
decrypt(key, text)

我遇到了一个编码问题。"UnicodeDecodeError:'ascii‘编解码器无法解码位置1中的字节0xf7 :序数不在范围(128)“该编码使问题复杂化,超出了我的能力范围。我的问题: 1.如何解决编码问题? 2.如何进行解密?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-03-26 03:46:49

该问题很可能是由于b64decode(text)返回一个包含\xf7等值的str,然后试图在decrypt函数中.encode()这些值造成的。encode将使用默认编码,在本例中为ascii。我个人会删除对encode的调用,除非您有明确的理由这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36222793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档