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

前端常用加密方式详解:Base64、MD5、AES 及 RSA

前端开发中常用的几种加密与编码技术,包括 Base64 编码、MD5 和 SHA-256 哈希算法,以及 AES 对称加密和 RSA 非对称加密。文章详细解释了各算法的原理、特点、适用场景,并提供了基于 CryptoJS 和 JSEncrypt 库的代码示例。同时对比了对称与非对称加密的区别,阐述了哈希算法的核心特征及其在缓存校验、密码存储等场景的应用,帮助开发者理解数据安全性方案。

ServerBase发布于 2026/4/6更新于 2026/7/1957 浏览
前端常用加密方式详解:Base64、MD5、AES 及 RSA

1、Base64 编码

Base64 不是一种加密算法,而是一种编码方法,用于将二进制数据转换为基于 64 个可打印字符的文本字符串。它常用于在 URL、Cookie、网页中传输少量二进制数据,以及内嵌小图片以减少服务器访问次数。

Base64 编码简单,对性能影响不大,但会增加数据体积约 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!"

2、MD5 加密

MD5 是一种广泛使用的哈希函数,产生 128 位(16 字节)的哈希值。虽然 MD5 的计算速度快且效率高,但存在碰撞风险,且安全性较低,因此不推荐直接用于密码存储。

import CryptoJS from "crypto-js";

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

// 使用示例
 originalText = ;
 encryptedText = (originalText);
.(encryptedText); 
const
"Hello, World!"
const
md5Encrypt
console
log
// "fc3ff98e8c6a0d3087d515c0473f8677"

3、SHA-256 加密

SHA-256 是 SHA-2 家族中的一种加密哈希算法,生成 256 位的哈希值。它比 MD5 更安全,适用于分布式系统,但加密和解密速度较慢,且密钥生成复杂。

import CryptoJS from "crypto-js";

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

// 使用示例
const originalText = "Hello, World!";
const encryptedText = sha256Encrypt(originalText);
console.log(encryptedText); // "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e"

4、AES 对称加密(常用)

AES 是高级加密标准,是一种对称加密算法,使用相同的密钥进行加密和解密。

  1. AES 加密:对称性加密(密钥 1 个,加解密都用这个密钥)
  2. AES 为一次一密,每次加密都会生成新的密钥
  3. AES 加密为了增加报文安全性

AES 加密速度快,适合大数据量加密,但密钥管理复杂,一旦密钥泄露,加密数据的安全性会受到威胁。

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);
}

// 使用示例
const key = "1234567890123456"; // AES key 必须为 16 位(AES-128),24 位(AES-192),或 32 位(AES-256)
const originalText = "Hello, World!";
const encryptedText = aesEncrypt(originalText, key);
console.log(encryptedText); // 密文
const decryptedText = aesDecrypt(encryptedText, key);
console.log(decryptedText); // "Hello, World!"

5、RSA 非对称加密(常用)

RSA(Rivest–Shamir–Adleman) 是一种非对称加密算法,它使用一对密钥——公钥和私钥来进行加密和解密操作。公钥用于加密数据,而私钥用于解密数据。

密钥对生成网站:http://web.chacuo.net/netrsakeypair

新建 jsencrypt.ts:

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); // 对数据进行解密
};

组件中使用:

<script setup>
import { encrypt, decrypt } from "@/utils/jsencrypt";

const text = "Hello, World!";
const encryptedText = encrypt(text); // 加密
console.log("加密后的结果----:", encryptedText);
const decryptedText = decrypt(encryptedText); // 解密
console.log("解密后的结果----:", decryptedText);
</script>

输出结果:

加密后的结果----: I7J3ay7KpwfGz3bEWDv4vuF1orJPwvctzEbfQhnC/B45mJjIhUWNeMLEzHLItECohMbeS8TLbN3SSBTB6u2JVg== 
解密后的结果----: Hello, World!

6、什么是对称和非对称加密

对称加密(Symmetric Encryption):

对称加密使用同一把密钥进行加密和解密。这意味着发送方和接收方都需要知道相同的密钥。

对称加密算法通常速度较快,适合用于大量数据的加密。

非对称加密(Asymmetric Encryption):

非对称加密使用一对密钥,即公钥和私钥。公钥可以公开发布,用于加密数据;私钥必须保密,用于解密数据。

非对称加密通常比对称加密慢,但由于其安全性更高,常用于密钥交换和身份认证等场景。

7、什么是哈希算法

哈希算法(Hash Function)是把任意长度的输入通过确定的数学变换,映射成固定长度的、看似随机的输出(哈希值 / 摘要 / 指纹)的规则。

1、核心特征
特征解释例子
确定性同一输入永远得到同一输出"hello" → 2cf24dba… 每次一样
定长输出输出长度固定,与输入大小无关SHA-256 永远 256 bit
不可逆从输出无法反推输入(单向函数)知道 5d41402a… 算不回 "hello"
雪崩效应输入轻微改动,输出天差地别"hello" vs "hallo" → 几乎全变
抗碰撞难以找到两个输入产生同一输出理想状态下几乎不可能
2、常见算法
算法输出长度场景状态
MD5128 bit旧校验/分片❌ 已不安全
SHA-1160 bitGit、老 TLS❌ 已不安全
SHA-256256 bit区块链、HTTPS、JWT✅ 主流
SHA-3 / BLAKE3可变新一代✅ 更安全
MurmurHash32/64/128 bit哈希表、分片✅ 高性能、非加密
3、前端/网络中的典型用途
  • 缓存校验:文件指纹 app.4e5c67.js 判断是否重新下载
  • 密码存储:bcrypt(password + salt) 保存摘要而不是明文
  • 数据结构:JavaScript 对象、Map、Set 内部哈希表
  • 分片上传:按文件内容哈希生成 etag 秒传/断点续传
  • URL 签名:?sign=SHA256(secret+path+exp) 防篡改
4、不是加密

哈希 ≠ 加密。加密是可逆的(需要密钥),哈希是单向的。 因此'解密哈希'是伪概念;正确说法应是'暴力破解'或'查彩虹表'。

哈希算法是数字世界的指纹机:给任何数据拍一张不可逆、唯一且定长的'指纹照',用来校验、索引、签名、去重、存密码。

目录

  1. 1、Base64 编码
  2. 2、MD5 加密
  3. 3、SHA-256 加密
  4. 4、AES 对称加密(常用)
  5. 5、RSA 非对称加密(常用)
  6. 6、什么是对称和非对称加密
  7. 7、什么是哈希算法
  8. 1、核心特征
  9. 2、常见算法
  10. 3、前端/网络中的典型用途
  11. 4、不是加密
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 4 款实用 AI 技能工具已在 GitHub 开源
  • AI 入门:Function Call、MCP 与 Agent 技术解析
  • Windows 下安装并编译 llama.cpp 指南
  • C++ 笔试算法实战:打怪模拟、字符串分类与连通分量
  • Python 开发 MongoDB 数据库 MCP Server 实战指南
  • OpenClaw 多 Agent 对接飞书机器人架构与配置
  • 在 TRAE IDE 中配置 MCP 服务器的方法
  • macOS Tahoe 26 降级至 macOS Sequoia 15 操作指南
  • 二叉搜索树:概念、性能与实现
  • GitHub Copilot 学生认证指南:Pro 版免费权益获取
  • GitHub 自定义 SSH Key 配置与验证指南
  • 深入理解 JSON Web Token (JWT)
  • 程序员考证指南:软考、英语、学历怎么挑
  • AI 调参技巧:网格搜索优化
  • PyTorch-CUDA 环境下 Stable Diffusion 推理速度分析
  • 扣子工作流详解:逻辑结构与常见节点
  • 黑客、骇客、白客与红客的定义及工作区别解析
  • llama.cpp 安装和配置指南
  • MySQL 基础(1):Ubuntu 安装与配置
  • Shannon:基于 AI 的自动化 Web 应用漏洞检测工具

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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