当前位置: 首页 > article >正文

前端开发常用的加密算法

以下是前端开发中常用的加密方式及其适用场景的详细说明:


一、核心加密方案

加密类型常用算法特点适用场景
对称加密AES、DES、3DES加密解密使用相同密钥,速度快本地存储加密、HTTP Body加密
非对称加密RSA、ECC公钥加密私钥解密,安全性高传输敏感数据、数字签名
哈希算法SHA-256、MD5(不推荐)单向不可逆,验证数据完整性密码存储、数据校验
消息认证码HMAC带密钥的哈希,防篡改API签名验证、防重放攻击
编码方案Base64、URL Encoding数据编码(非加密)二进制数据传输、简单混淆

二、具体实现方案

1. **AES 对称加密(推荐使用)
// 使用 crypto-js 库
import CryptoJS from 'crypto-js'// 加密
const encryptAES = (text, secretKey) => {return CryptoJS.AES.encrypt(text, secretKey).toString()
}// 解密
const decryptAES = (ciphertext, secretKey) => {const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey)return bytes.toString(CryptoJS.enc.Utf8)
}// 使用示例
const key = 'my-secret-key-123'
const encrypted = encryptAES('敏感数据', key) // U2FsdGVkX1+Z6Jw7j6/4w6...
const decrypted = decryptAES(encrypted, key) // 敏感数据
2. RSA 非对称加密
// 使用 jsencrypt 库
import JSEncrypt from 'jsencrypt'// 加密
const encryptRSA = (text, publicKey) => {const encryptor = new JSEncrypt()encryptor.setPublicKey(publicKey)return encryptor.encrypt(text)
}// 解密(需私钥,通常后端处理)
const privateKey = '-----BEGIN RSA PRIVATE KEY-----...'
const decryptRSA = (ciphertext) => {const decryptor = new JSEncrypt()decryptor.setPrivateKey(privateKey)return decryptor.decrypt(ciphertext)
}// 使用示例
const publicKey = '-----BEGIN PUBLIC KEY-----...'
const encrypted = encryptRSA('信用卡号', publicKey) // aGVsbG8xMjPCow==...
3. SHA-256 哈希 + 盐值
// 密码存储方案
const hashPassword = (password, salt) => {return CryptoJS.SHA256(password + salt).toString()
}// 注册时存储
const userPassword = '123456'
const salt = CryptoJS.lib.WordArray.random(16).toString() // 随机盐值
const hashedPwd = hashPassword(userPassword, salt) // 存储 hash + salt// 登录验证
const isMatch = hashPassword(inputPwd, salt) === storedHash

三、进阶加密场景

1. Web Crypto API(原生浏览器支持)
// AES-GCM 加密(更安全)
async function encryptData(plaintext, key) {const iv = crypto.getRandomValues(new Uint8Array(12))const algorithm = { name: 'AES-GCM', iv }const cryptoKey = await crypto.subtle.importKey('raw', new TextEncoder().encode(key),{ name: 'AES-GCM' },false,['encrypt'])const ciphertext = await crypto.subtle.encrypt(algorithm,cryptoKey,new TextEncoder().encode(plaintext))return { iv, ciphertext }
}
2. JWT 签名方案
// 生成 Token
const header = { alg: 'HS256', typ: 'JWT' }
const payload = { userId: 123, exp: Date.now() + 3600 }
const secret = 'your-secret-key'const token = [base64(JSON.stringify(header)),base64(JSON.stringify(payload)),HMACSHA256(header + payload, secret)
].join('.')

四、安全实践建议

  1. 密钥管理规范

    // 错误方式(硬编码密钥)
    const key = 'static-key' // ❌// 正确方式(动态获取)
    async function getKey() {return fetch('/api/get-encrypt-key') // ✅
    }
    
  2. 防御彩虹表攻击

    // 密码哈希加强方案
    const hash = (pwd) => {const salt = CryptoJS.lib.WordArray.random(128/8)const iterations = 10000 // 迭代次数return CryptoJS.PBKDF2(pwd, salt, {keySize: 256/32,iterations})
    }
    
  3. 传输层安全

    # 强制HTTPS(Nginx配置)
    server {listen 80;server_name example.com;return 301 https://$host$request_uri;
    }
    

五、加密方案选型指南

场景推荐方案注意事项
用户密码存储PBKDF2 / bcrypt必须加盐、高迭代次数
HTTP 敏感数据传输HTTPS + AES(CBC/GCM)配合密钥轮换策略
防篡改参数HMAC-SHA256签名密钥不出前端
临时数据保护Web Crypto API优先使用浏览器原生方案
简单混淆Base64 + 自定义规则不能用于安全敏感场景

六、常见误区

  1. 前端加密无法替代 HTTPS

    加密数据
    浏览器
    HTTPS传输
    服务器解密
    • 即使前端加密,仍需使用 HTTPS 保障传输安全
  2. MD5 已不安全

    # 破解示例(仅需数秒)
    md5("hello") = 5d41402abc4b2a76b9719d911017c592
    # 可通过彩虹表快速反查
    
  3. 加密 ≠ 授权

    • 需配合 JWT、OAuth 2.0 等授权方案使用

七、性能优化建议

  1. Web Worker 处理加密

    // 主线程
    const worker = new Worker('crypto-worker.js')
    worker.postMessage({ type: 'encrypt', data: 'xxx' })// Worker线程
    self.onmessage = (e) => {const result = encryptData(e.data)self.postMessage(result)
    }
    
  2. 缓存加密结果

    const cache = new Map()
    function cachedEncrypt(data) {if (cache.has(data)) return cache.get(data)const result = encrypt(data)cache.set(data, result)return result
    }
    

通过合理使用这些加密方案,可以在以下方面提升安全性:

  • 数据保密性:防止敏感信息泄露 🔒
  • 数据完整性:检测篡改行为 🛡️
  • 身份验证:确保通信方身份 ✅

但需注意:前端加密不能替代后端安全措施,敏感操作(如支付验证)仍需服务端二次验证。建议结合安全审计工具(如 OWASP ZAP)定期检测系统漏洞。

相关文章:

前端开发常用的加密算法

以下是前端开发中常用的加密方式及其适用场景的详细说明: 一、核心加密方案 加密类型常用算法特点适用场景对称加密AES、DES、3DES加密解密使用相同密钥,速度快本地存储加密、HTTP Body加密非对称加密RSA、ECC公钥加密私钥解密,安全性高传输…...

5. Nginx 负载均衡配置案例(附有详细截图说明++)

5. Nginx 负载均衡配置案例(附有详细截图说明) 文章目录 5. Nginx 负载均衡配置案例(附有详细截图说明)1. Nginx 负载均衡 配置实例3. 注意事项和避免的坑4. 文档: Nginx 的 upstream 配置技巧5. 最后: 1. Nginx 负载均衡 配置实例 需求说明/图解 windows 浏览器输…...

C++之再识模板template

目录 1.非类型模板参数 2.函数/类模板的特化 3.模板的分离编译 4.总结:模板的优缺点 1. 代码复用性高 2. 类型安全 3. 性能优化 2. 错误信息难以理解 3. 代码膨胀 易错易忽略的语法点: 1. 模板声明和定义分离问题 2. 模板参数推导问题 1.非类…...

【文献阅读】Collective Decision for Open Set Recognition

基本信息 文献名称:Collective Decision for Open Set Recognition 出版期刊:IEEE TRANSACTIONS ON KNOWLEDGE AND DATA ENGINEERING 发表日期:04 March 2020 作者:Chuanxing Geng and Songcan Chen 摘要 在开集识别&#xff0…...

力扣刷题DAY2(链表/简单)

一、回文链表 回文链表 方法一:双指针 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, L…...

golang 内存对齐和填充规则

内存对齐和填充规则 对齐要求:每个数据类型的起始地址必须是其大小的倍数。 int8(1字节):不需要对齐。int16(2字节):起始地址必须是2的倍数。int32(4字节):起…...

ansible自动化运维工具学习笔记

目录 ansible环境部署 控制端准备 被控制端准备 ansible批量管理主机的方式主要有两种 配置准备: ssh密码认证方式管理机器 密码登录,需要各主机密码相同 配置免密登录 ssh密钥方式批量管理主机 ansible实现批量化主机管理的模式 ansible-doc命令 comman…...

零基础deep seek+剪映,如何制作高品质的视频短片

以下是专为零基础学习者设计的 剪映专业版详细教程+Deep seek配合制 ,包含从入门到精通的系统化教学,配合具体操作步骤与实用技巧: 基于DeepSeek与剪映协同制作高品质视频短片的专业流程指南(2025年最新实践版&#x…...

网络空间安全(4)web应用程序安全要点

前言 Web应用程序安全是确保Web应用程序、服务和服务器免受网络攻击和威胁的关键环节。 一、编写安全的代码 输入验证与过滤:确保所有的用户输入都被正确验证和过滤,以防止注入攻击等安全漏洞。开发者应对URL、查询关键字、HTTP头、POST数据等进行严格的…...

【word】保存重开题注/交叉引用消失,全局更新域问题

目录 一、更新域是什么二、更新域常见问题及解决方法(一)更新域后内容未变化(二)域代码显示异常(三)交叉引用无法更新(四)全选更新域出现错误 三、交叉引用与题注的关系及操作&#…...

大语言模型中的 Token:它们是什么,如何工作?

引言 如果你使用过 ChatGPT 这样的 AI 工具,你可能会好奇:它是如何理解并生成文字的?大语言模型(LLM,Large Language Model)并不是直接处理整个句子或文章,而是拆分成一个个 Token(…...

DeepSeek的无限可能

DeepSeek的无限可能 DeepSeek简介DeepSeek定义DeepSeek的发展历程DeepSeek的核心功能 如何使用DeepSeek注册与安装模型使用原则提示语的使用 人机共生 DeepSeek简介 DeepSeek定义 DeepSeek(中文名:深度求索)是一款由杭州深度求索人工智能基…...

【wordpress】服务器已有LNMP环境(已运行WordPress),如何配置文档访问功能?

效果如图步骤确定文件存放目录404.html修改配置文件重启nginx服务 接下来是从win向linux云服务器上传文件使用Samba服务(没成功)使用xshell上传文件(大文件上传一堆乱码)winscp(好用) 效果如图 如果url不对…...

Ollama 的庐山真面目

Ollama 运行方式分析 本地推理条件(GPU/CPU/RAM):Ollama 支持在本地电脑进行大模型推理,但需要满足一定的硬件条件。一般来说,GPU 有助于加速推理,特别是显存较大的 GPU 能够加载更大的模型;如果…...

行为型模式 - 观察者模式 (Publish/Subscribe)

行为型模式 - 观察者模式 (Publish/Subscribe) 又称作为订阅发布模式(Publish-Subscribe Pattern)是一种消息传递模式,在该模式中,发送者(发布者)不会直接将消息发送给特定的接收者(订阅者&…...

C++编程指南21 - 线程detach后其注意变量的生命周期

一:概述 如果一个线程被 detach() 了,那么它的生命周期将独立于创建它的作用域。因此,该线程只能安全地访问: 全局变量(global/static objects)堆上分配的对象(free-store allocated objects&a…...

Hadoop之01:HDFS分布式文件系统

HDFS分布式文件系统 1.目标 理解分布式思想学会使用HDFS的常用命令掌握如何使用java api操作HDFS能独立描述HDFS三大组件namenode、secondarynamenode、datanode的作用理解并独立描述HDFS读写流程HDFS如何解决大量小文件存储问题 2. HDFS 2.1 HDFS是什么 HDFS是Hadoop中的一…...

Redis学习笔记系列(一)——Redis简介及安装

1. Redis介绍 Redis是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行…...

【考试大纲】初级信息处理技术员考试大纲

目录 引言一、考试说明1.考试要求2.考试目标二、考试范围科目一:信息处理基础知识科目二:信息处理应用技术引言 最新的信息处理技术员考试大纲出版于 2018 年 6 月,本考试大纲基于此版本整理。 一、考试说明 1.考试要求 (1)了解信息技术的基本概念; (2)熟悉计…...

LabVIEW正弦信号处理:FFT与最小二乘拟合的参数提取

问题一:LabVIEW能否对采集的正弦力信号进行快速傅里叶变换(FFT),并得到幅值和相位结果? 答案: 可以。LabVIEW通过内置信号处理工具包提供完整的FFT分析功能,具体实现如下: FFT分析流…...

【计算机网络入门】初学计算机网络(五)

目录 1.编码&解码、调制&解调 2.常用编码方法 2.1 不归零编码(NRZ) 2.2 归零编码(RZ) 2.3 反向非归零编码(NRZI) 2.4 曼彻斯特编码 2.5 差分曼彻斯特编码 3. 各种编码的特点 4.调制 5.有线传输介质 5.1 双绞线 5.2 同轴电缆 5.3 光…...

YOLO在PiscTrace上检测到数据分析

在现代计算机视觉领域,实时视频数据的检测与分析对于安全监控、交通管理以及智能制造等领域具有重要意义。YOLO(You Only Look Once)作为一种高效的目标检测算法,能够在保持高精度的同时实现实时检测。而PiscTrace作为一款集成了O…...

【漫话机器学习系列】112.逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)详解 1. 逻辑回归简介 逻辑回归(Logistic Regression)是一种广泛用于二分类任务的统计和机器学习方法,尽管它的名字中带有“回归”,但它实际上是一种分类算法。 在逻辑回归…...

【计算机网络入门】初学计算机网络(六)

目录 1.回忆数据链路层作用 2. 组帧 2.1 四种组帧方法 2.1.1 字符计数法 2.1.2 字节填充法 2.1.3 零比特填充法 2.1.4 违规编码法 3. 差错控制 3.1 检错编码 3.1.1 奇偶校验码 3.1.2 CRC(循环冗余校验)校验码 3.2 纠错编码 3.2.1 海明校验码…...

DeepSeek 与云原生后端:AI 赋能现代应用架构

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 在当今快速发展的互联网时代,云原生(Cloud Native)架构已成为后端开发的主流趋势。云…...

leetcode第17题求电话号码组合

原题出于leetcode第17题https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/题目如下: 题目稍微有点复杂,初看会感觉特别复杂,首先我们需要理清思路: 最后的结果是字母组合,因此遍历的是…...

DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力

论文标题:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 作者团队:DeepSeek-AI 发表时间:2025 前置知识 & 术语 模型蒸馏 语言模型蒸馏的目标是将大型教师模型的知识(如语义理解、上…...

PDF文档中表格以及形状解析

我们在做PDF文档解析时有时需要解析PDF文档中的表格、形状等数据。跟解析文本类似的常见的解决方案也是两种。文档解析跟ocr技术处理。下面我们来看看使用文档解析的方案来做PDF文档中的表格、图形解析(使用pdfium库)。 表格解析: 在pdfium库…...

深入理解并实现自定义 unordered_map 和 unordered_set

亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 在 C 的标准模板库(STL)中,unorder…...

228页PPT丨制造业核心业务流程优化咨询全案(战略营销计划生产研发质量),附核心系统集成架构技术支撑体系,2月26日资料已更新

一、订单全生命周期管理优化 1. 智能订单承诺(CTP)系统 ●集成ERP/APS/MES数据,实时计算产能可视性 ●应用蒙特卡洛模拟评估订单交付风险 ●建立动态插单评估模型(基于边际贡献与产能占用系数) 2. 跨部门协同机制…...