使用Javascript解码密码编码的字符串

使用Javascript解码密码编码的字符串,javascript,python,cryptography,Javascript,Python,Cryptography,我在Python中使用此方法对字符串进行了编码。我想用Javascript解码编码的字符串 来自Crypto.Cipher导入异或 def加密(密钥,明文): 密码=XOR.new(密钥) 返回base64.b64编码(加密(明文)) 我找到了一个更好的解决方案,用Python加密,用Javascript解密 Python编码部分: import base64 from Crypto import Random from Crypto.Cipher import AES import j

我在Python中使用此方法对字符串进行了编码。我想用Javascript解码编码的字符串

来自Crypto.Cipher导入异或
def加密(密钥,明文):
密码=XOR.new(密钥)
返回base64.b64编码(加密(明文))

我找到了一个更好的解决方案,用Python加密,用Javascript解密

Python编码部分:

 import base64
 from Crypto import Random
 from Crypto.Cipher import AES
 import json

 def encrypt_val(clear_text):
    master_key = '0123456789101112' 
    encoder = PKCS7Encoder()
    raw = encoder.encode(clear_text)
    iv = Random.new().read( 16 )
    cipher = AES.new( master_key, AES.MODE_CBC, iv, segment_size=128 )
    return base64.b64encode( iv + cipher.encrypt( raw ) ) 

 print(encrypt_val(json.dumps({"name":"Tahir"})))
const CryptoJS = require('crypto-js')
const atob = require('atob')

function decryptMsg (data) {
    master_key = '0123456789101112';

    // Decode the base64 data so we can separate iv and crypt text.
    var rawData = atob(data);
    // Split by 16 because my IV size
    var iv = rawData.substring(0, 16);
    var crypttext = rawData.substring(16);

    //Parsers
    crypttext = CryptoJS.enc.Latin1.parse(crypttext);
    iv = CryptoJS.enc.Latin1.parse(iv); 
    key = CryptoJS.enc.Utf8.parse(master_key);

    // Decrypt
    var plaintextArray = CryptoJS.AES.decrypt(
      { ciphertext:  crypttext},
      key,
      {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}
    );

    // Can be Utf8 too
    output_plaintext = CryptoJS.enc.Latin1.stringify(plaintextArray);
    console.log("plain text : " + output_plaintext);
}
encoded_message = "XF8T/miPPVk9B7GfNUshRqJf6//sJnWey+TqoXj70Tp0vJhjw22uDLOLh7es4BOp"
decryptMsg(encoded_message)
Javascript解码部分:

 import base64
 from Crypto import Random
 from Crypto.Cipher import AES
 import json

 def encrypt_val(clear_text):
    master_key = '0123456789101112' 
    encoder = PKCS7Encoder()
    raw = encoder.encode(clear_text)
    iv = Random.new().read( 16 )
    cipher = AES.new( master_key, AES.MODE_CBC, iv, segment_size=128 )
    return base64.b64encode( iv + cipher.encrypt( raw ) ) 

 print(encrypt_val(json.dumps({"name":"Tahir"})))
const CryptoJS = require('crypto-js')
const atob = require('atob')

function decryptMsg (data) {
    master_key = '0123456789101112';

    // Decode the base64 data so we can separate iv and crypt text.
    var rawData = atob(data);
    // Split by 16 because my IV size
    var iv = rawData.substring(0, 16);
    var crypttext = rawData.substring(16);

    //Parsers
    crypttext = CryptoJS.enc.Latin1.parse(crypttext);
    iv = CryptoJS.enc.Latin1.parse(iv); 
    key = CryptoJS.enc.Utf8.parse(master_key);

    // Decrypt
    var plaintextArray = CryptoJS.AES.decrypt(
      { ciphertext:  crypttext},
      key,
      {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}
    );

    // Can be Utf8 too
    output_plaintext = CryptoJS.enc.Latin1.stringify(plaintextArray);
    console.log("plain text : " + output_plaintext);
}
encoded_message = "XF8T/miPPVk9B7GfNUshRqJf6//sJnWey+TqoXj70Tp0vJhjw22uDLOLh7es4BOp"
decryptMsg(encoded_message)

什么是异或?你在使用什么库?@rdas:很可能。你只需颠倒这个过程。首先,base64解码。然后用键对结果进行异或运算。