从python tcp服务器到nodejs客户端的AES加密数据

从python tcp服务器到nodejs客户端的AES加密数据,python,node.js,encryption,aes,Python,Node.js,Encryption,Aes,我正在尝试使用tcp服务器将数据从python加密/解密到node.js。 当客户端连接到服务器时,服务器发送加密消息 似乎我发送的数据很好,但密钥的解码似乎是错误的。 我检查了几次我的代码,但我没有发现它有什么问题。 我发送密钥只是为了测试,稍后我会用另一个密钥加密它 这是我的密码: server.py import socketserver import json from base64 import b64encode,b64decode from Crypto.Cipher import

我正在尝试使用tcp服务器将数据从python加密/解密到node.js。 当客户端连接到服务器时,服务器发送加密消息

似乎我发送的数据很好,但密钥的解码似乎是错误的。 我检查了几次我的代码,但我没有发现它有什么问题。 我发送密钥只是为了测试,稍后我会用另一个密钥加密它

这是我的密码:

server.py

import socketserver
import json
from base64 import b64encode,b64decode
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

class Handler_TCPServer(socketserver.BaseRequestHandler):
    def handle(self):
    data = "A random secret"
    
    key = get_random_bytes(32)

    cipher = AES.new(key, AES.MODE_CFB)
    ct_bytes = cipher.encrypt(data.encode())
    
    iv = b64encode(cipher.iv).decode('utf-8')
    ct = b64encode(ct_bytes).decode('utf-8')
    
    json_encode = json.dumps({'key':key.hex(),'iv':iv, 'ciphertext':ct},indent=2)
    
    self.request.sendall(json_encode.encode())
    
    json_decode = json.loads(json_encode)
    iv = b64decode(json_decode['iv'])
    ct = b64decode(json_decode['ciphertext'])

    cipher = AES.new(bytes.fromhex(json_decode['key']), AES.MODE_CFB, iv=iv)
    date_decrypted = cipher.decrypt(ct)

    print("Secret was: ", date_decrypted.decode())
    print(data.encode().hex())

if __name__ == "__main__":
    HOST, PORT = "localhost", 9000
    tcp_server = socketserver.TCPServer((HOST, PORT), Handler_TCPServer)
    tcp_server.serve_forever()
client.js

var net = require('net');
var crypto = require('crypto'); 

var HOST = 'localhost';
var PORT = 9000;

var client = new net.Socket();
var buff = []

function decrypt(json) { 
    let iv = Buffer.from(json.iv,'base64');
    let encryptedText = Buffer.from(json.ciphertext,'base64'); 
    let key =  Buffer.from(json.key,'hex')
    
    let decipher = crypto.createDecipheriv('aes-256-cfb',key, iv); 
    decrypted = Buffer.concat([decipher.update(encryptedText), decipher.final()]); 
    return decrypted.toString(); 
} 
   

client.on('data', function(data) {    
    console.log('Client received: ');
    buff.push(data)    
});

client.on('end', function(data) {    
    let concat   = Buffer.concat(buff);
    let json_decode = JSON.parse(concat);
    let msg_decrypt = decrypt(json_decode)
});

client.connect(PORT, HOST, function() {
    console.log('Client connected to: ' + HOST + ':' + PORT); 
});

client.on('timeout',function(){
    console.log('timeout')
})

client.on('close', function() {
    console.log('Client closed');
});
 
client.on('error', function(err) {
    console.error('error',err);
});

在Python代码中,CFB8默认用于。NodeJS代码中的对应项是
aes-256-cfb8
,s。有了它,Python加密/NodeJS解密部分就可以工作了,至少在我的机器上是这样。很有效,谢谢。