第十五章

项目 3:API 数据传输加密

AES 加密 + Base64 编码:保护敏感数据的黄金搭档

概念

在传输敏感数据(如用户信用卡号、密码)时,仅仅使用 HTTPS 有时是不够的(如防止中间代理记录日志)。通常应用层也会进行加密。

流程:明文 -> AES 加密 (得到二进制密文) -> Base64 编码 (得到字符串) -> 通过 JSON API 发送

Node.js 实现

const crypto = require('crypto');

// 配置
const ALGORITHM = 'aes-256-cbc';
const KEY = crypto.randomBytes(32); // 真实场景中应该从环境变量读取
const IV = crypto.randomBytes(16);

function encrypt(text) {
    let cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(KEY), IV);
    let encrypted = cipher.update(text);
    encrypted = Buffer.concat([encrypted, cipher.final()]);
    
    // 关键点:将二进制密文 + IV 转换为 Base64
    return {
        iv: IV.toString('base64'),
        content: encrypted.toString('base64')
    };
}

function decrypt(text) {
    // 1. Base64 解码提取 IV 和 密文
    let iv = Buffer.from(text.iv, 'base64');
    let encryptedText = Buffer.from(text.content, 'base64');
    
    // 2. 解密
    let decipher = crypto.createDecipheriv(ALGORITHM, Buffer.from(KEY), iv);
    let decrypted = decipher.update(encryptedText);
    decrypted = Buffer.concat([decrypted, decipher.final()]);
    
    return decrypted.toString();
}

// 使用
const secret = "My Super Secret Data";
const encryptedPacket = encrypt(secret);
console.log("Encrypted:", encryptedPacket);
// 结果: { iv: "...", content: "..." }

const restored = decrypt(encryptedPacket);
console.log("Restored:", restored);

🎉 恭喜!你已完成所有教程

你已经深入了解了 Base64 的原理、实现、优化和应用。

去使用工具 →