下面是一个使用AES加密和解密算法在Arduino和Node.js之间进行双向通信的示例:
Arduino端代码示例:
#include
#include
CTR cipher;
void setup() {
Serial.begin(9600);
cipher.clear();
}
void loop() {
if (Serial.available()) {
String message = Serial.readString();
// 加密消息
String encryptedMessage = cipher.encrypt(message);
Serial.println(encryptedMessage);
// 解密消息
String decryptedMessage = cipher.decrypt(encryptedMessage);
Serial.println(decryptedMessage);
}
}
Node.js端代码示例:
const crypto = require('crypto');
const algorithm = 'aes-128-ctr';
const secretKey = '0123456789abcdef'; // 16字节的密钥
const iv = crypto.randomBytes(16); // 16字节的随机向量
// 加密函数
function encrypt(text) {
const cipher = crypto.createCipheriv(algorithm, secretKey, iv);
const encrypted = cipher.update(text, 'utf8', 'hex') + cipher.final('hex');
return encrypted;
}
// 解密函数
function decrypt(encryptedText) {
const decipher = crypto.createDecipheriv(algorithm, secretKey, iv);
const decrypted = decipher.update(encryptedText, 'hex', 'utf8') + decipher.final('utf8');
return decrypted;
}
// 在这里替换为您的串口通信代码
// 从Arduino读取加密的消息并解密
// 将解密的消息发送回Arduino
// 示例代码:
const SerialPort = require('serialport');
const Readline = require('@serialport/parser-readline');
const port = new SerialPort('/dev/ttyACM0', { baudRate: 9600 });
const parser = port.pipe(new Readline({ delimiter: '\n' }));
// 从串口读取加密消息
parser.on('data', (data) => {
// 解密消息
const decryptedMessage = decrypt(data);
console.log(decryptedMessage);
// 加密并发送回Arduino
const encryptedMessage = encrypt(decryptedMessage);
port.write(encryptedMessage);
});
请注意,上述示例中使用的加密算法是AES-128,并且使用的是CTR模式。您可以根据需要更改密钥和其他加密参数。同时,还要确保在Arduino和Node.js之间的串口通信设置正确。