MST

星途 面试题库

面试题:JavaScript中Node非HTTP网络通信安全基础

在Node.js非HTTP网络通信场景下,简述如何使用JavaScript的crypto模块为通信数据添加基本的加密保护,举例说明常用的加密算法及其应用场景。
28.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

使用crypto模块为通信数据添加加密保护

  1. 引入crypto模块:在Node.js中,首先需要引入crypto模块。
const crypto = require('crypto');
  1. 选择加密算法crypto模块支持多种加密算法,如aes - 256 - cbcdes - cbc等。
  2. 生成密钥和初始化向量(IV):对于某些加密模式(如CBC),需要初始化向量。密钥长度要与所选算法匹配。
const key = crypto.randomBytes(32); // 256 - bit key for aes - 256 - cbc
const iv = crypto.randomBytes(16); // 128 - bit iv for aes - 256 - cbc
  1. 加密数据:使用createCipheriv方法创建加密器,然后更新并最终完成加密。
function encrypt(text) {
    const cipher = crypto.createCipheriv('aes - 256 - cbc', key, iv);
    let encrypted = cipher.update(text, 'utf8', 'hex');
    encrypted += cipher.final('hex');
    return encrypted;
}
  1. 解密数据:使用createDecipheriv方法创建解密器,同样更新并最终完成解密。
function decrypt(encryptedText) {
    const decipher = crypto.createDecipheriv('aes - 256 - cbc', key, iv);
    let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
    decrypted += decipher.final('utf8');
    return decrypted;
}

常用加密算法及其应用场景

  1. AES(高级加密标准)
    • 常用模式aes - 128 - cbcaes - 256 - cbcaes - 256 - gcm等。
    • 应用场景:广泛用于数据传输和存储加密,如网络通信中的敏感信息(登录密码、信用卡号等)加密,以及文件加密。例如,在Node.js开发的API服务中,对用户密码传输进行加密。
  2. DES(数据加密标准)
    • 常用模式des - cbc等。
    • 应用场景:曾经广泛应用于金融等领域,但由于其密钥长度较短(56位),安全性逐渐降低,如今较少使用。不过在一些旧系统兼容性需求下仍可能会出现。
  3. RSA
    • 特点:非对称加密算法,使用公钥加密,私钥解密。
    • 应用场景:主要用于密钥交换和数字签名。例如,在HTTPS握手过程中用于交换对称加密密钥,以及在数字证书系统中用于验证证书的真实性。在Node.js中,可以使用crypto模块生成RSA密钥对,并进行加密和解密操作。