跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端算法

前端常用加密方案:Base64、MD5、AES 与 RSA 实战

前端安全涉及多种加密手段。Base64 用于编码而非加密;MD5 和 SHA-256 是哈希算法,适合校验与密码摘要,不可逆;AES 对称加密速度快,适合大数据量但需妥善管理密钥;RSA 非对称加密通过公私钥对保障传输安全。文章提供了各方案的代码实现及原理对比,帮助开发者根据场景选择合适的加密策略。

2177283801发布于 2026/3/26更新于 2026/7/2534 浏览
前端常用加密方案:Base64、MD5、AES 与 RSA 实战

在前端开发中,数据安全往往容易被忽视。无论是用户隐私传输还是接口签名,选择合适的加密方式至关重要。本文将梳理几种常见的前端加密方案,从编码到哈希,再到对称与非对称加密,结合实战代码帮你快速上手。

Base64 编码

首先需要明确,Base64 并非加密算法,而是一种编码方式。它将二进制数据转换为 64 个可打印字符的文本字符串。这常用于 URL 传输、Cookie 存储或内嵌图片以减少请求次数。虽然性能影响小,但数据体积会增加约 1/3,且不具备保密性。

function toBase64(str) {
  return btoa(unescape(encodeURIComponent(str)));
}

function fromBase64(str) {
  return decodeURIComponent(escape(atob(str)));
}

// 使用示例
const originalText = "Hello, World!";
const encodedText = toBase64(originalText);
console.log(encodedText); // "SGVsbG8sIFdvcmxkIQ=="
const decodedText = fromBase64(encodedText);
console.log(decodedText); // "Hello, World!"

MD5 与 SHA-256 哈希

这两者属于哈希算法,产生固定长度的摘要。它们不可逆,因此不能用来'解密',主要用于数据完整性校验或密码存储(配合盐值)。

MD5 计算快但存在碰撞风险,已不推荐用于高安全场景。SHA-256 则更安全,适用于分布式系统或区块链等场景。

import CryptoJS from 'crypto-js';

function md5Encrypt(str) {
  return CryptoJS.MD5(str).toString();
}

function sha256Encrypt(str) {
  return CryptoJS.SHA256(str).toString();
}

// 示例
const originalText = "Hello, World!";
console.log(md5Encrypt(originalText)); 
console.log(sha256Encrypt(originalText));

AES 对称加密

AES 是高级加密标准,加解密使用同一把密钥。它的速度很快,适合处理大量数据。不过,密钥管理是关键,一旦泄露,所有数据都将暴露。

在实际应用中,为了增强安全性,通常会结合随机向量(IV)使用 CBC 模式,而不是简单的 ECB 模式。下面是一个基于 CryptoJS 的基础实现示例:

import CryptoJS from 'crypto-js';

function aesEncrypt(data, key) {
  const keyHex = CryptoJS.enc.Utf8.parse(key);
  const encrypted = CryptoJS.AES.encrypt(data, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return encrypted.toString();
}

function aesDecrypt(encryptedData, key) {
  const keyHex = CryptoJS.enc.Utf8.parse(key);
  const decrypted = CryptoJS.AES.decrypt(encryptedData, keyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
  });
  return decrypted.toString(CryptoJS.enc.Utf8);
}

// 注意:生产环境建议使用 CBC 模式并传入 IV
const key = "1234567890123456"; // 必须为 16/24/32 位
const originalText = "Hello, World!";
const encryptedText = aesEncrypt(originalText, key);
const decryptedText = aesDecrypt(encryptedText, key);

RSA 非对称加密

RSA 使用一对密钥:公钥加密,私钥解密。公钥可以公开,私钥必须严格保密。它常用于密钥交换或身份认证,虽然比对称加密慢,但安全性更高。

在 TypeScript 项目中,我们可以封装一个工具类来简化操作。以下是基于 jsencrypt 库的实现思路:

import { JSEncrypt } from 'jsencrypt';

const publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n" +
  "nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==";

const privateKey = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n" +
  "7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n" +
  "PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n" +
  "kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n" +
  "cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n" +
  "DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n" +
  "YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n" +
  "UP8iWi1Qw0Y=";

export const encrypt = (txt: string) => {
  const encryptor = new JSEncrypt();
  encryptor.setPublicKey(publicKey);
  return encryptor.encrypt(txt);
};

export const decrypt = (txt: string) => {
  const encryptor = new JSEncrypt();
  encryptor.setPrivateKey(privateKey);
  return encryptor.decrypt(txt);
};

在 Vue 组件中调用时,只需引入上述方法即可。记得私钥不要硬编码在前端代码中,实际生产环境通常由后端生成密钥对,前端只保留公钥用于加密敏感信息。

核心概念补充

为了更清晰地选择方案,这里简单回顾一下几个关键概念:

对称 vs 非对称

对称加密(如 AES)速度快,适合大数据,但密钥分发困难。非对称加密(如 RSA)解决了密钥分发问题,但速度慢,适合小数据或密钥交换。

哈希算法

哈希是将任意长度输入映射为固定长度输出的过程。它具有确定性、定长、不可逆和雪崩效应。常见的用途包括文件指纹校验、密码存储(存摘要而非明文)、URL 签名防篡改等。记住,哈希不是加密,无法'解密',只能通过暴力破解或查表尝试还原。

希望这些内容能帮你在前端安全建设中少走弯路。

目录

  1. Base64 编码
  2. MD5 与 SHA-256 哈希
  3. AES 对称加密
  4. RSA 非对称加密
  5. 核心概念补充
  6. 对称 vs 非对称
  7. 哈希算法
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026 RAG 技术演进:DeepSeek 结合 Neo4j 构建企业智能体系
  • HarmonyOS ArkUI 布局详解:相对布局与栅格布局
  • 鸿蒙金融理财全栈项目:上线运维、用户反馈与持续迭代
  • 平凡人的努力与坚持:致敬默默前行者
  • Python 使用 Selenium 实现电商自动抢购脚本教程
  • OpenClaw Linux 本地 AI 智能体部署指南
  • Neo4j Desktop 2 安装与使用指南
  • Java 剪辑接单报价比价系统架构设计与实现
  • Kiro IDE 实战:Spec 驱动 AI 编程,需求明确自动出代码
  • CosyVoice3 支持 ARPAbet 音素标注,提升英文发音准确性
  • Java 模拟算法题目练习
  • Rust 控制流详解:条件、循环与模式匹配
  • C++ 核心就业方向与技术成长指南
  • 大模型 LLMs 热门研究方向盘点:RAG、Agent、Mamba、MoE、LoRA
  • Cookie 与 Session:Web 用户状态管理详解
  • Web3 开发者必懂的 10 个核心 ERC 标准
  • VSCode 中配置 Copilot MCP 快速上手指南
  • OpenAI gpt-oss 开源模型本地部署教程
  • RabbitMQ/Spring-AMQP 高级特性:事务机制与消息限流实战
  • OpenClaw 多 Agent 与多飞书机器人配置指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online