前端常用加密方式使用

前端常用加密方式使用

文章目录

1、Base64 编码

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

Base64 编码简单,对性能影响不大,但会增加数据体积约 1/3,且无法缓存。

functiontoBase64(str){returnbtoa(unescape(encodeURIComponent(str)));}functionfromBase64(str){returndecodeURIComponent(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";functionmd5Encrypt(str){return CryptoJS.MD5(str).toString();}// 使用示例const originalText ="Hello, World!";const encryptedText =md5Encrypt(originalText); console.log(encryptedText);// "fc3ff98e8c6a0d3087d515c0473f8677"

3、SHA-256 加密

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

import CryptoJS from"crypto-js";functionsha256Encrypt(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";functionaesEncrypt(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();}functionaesDecrypt(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=";// 加密exportconstencrypt=(txt: string)=>{const encryptor =newJSEncrypt(); encryptor.setPublicKey(publicKey);// 设置公钥return encryptor.encrypt(txt);// 对数据进行加密};// 解密exportconstdecrypt=(txt: string)=>{const encryptor =newJSEncrypt(); 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 对象、MapSet 内部哈希表
  • 分片上传:按文件内容哈希生成 etag 秒传/断点续传
  • URL 签名?sign=SHA256(secret+path+exp) 防篡改

4. 不是加密

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

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


👉点击进入我的网站

Read more

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果

GLM-4.6V-Flash-WEB Web界面使用指南,拖图就出结果 你不需要配置环境、不用写一行推理代码、甚至不用打开终端——只要把一张截图拖进浏览器窗口,几秒钟后,它就能告诉你图里写了什么、画了什么、哪里有问题。这不是未来预告,而是你现在就能在本地跑起来的真实体验。 GLM-4.6V-Flash-WEB 是智谱AI最新开源的轻量级视觉语言模型,专为Web端实时交互而生。它不像某些“实验室模型”那样只存在于论文和Benchmark表格里,而是真正做到了:部署快、启动快、响应快、上手更快。一块RTX 3090,一个浏览器,一次拖拽,结果即刻呈现。 本文不讲训练原理,不列参数表格,不堆技术术语。我们只聚焦一件事:怎么用好它的Web界面?从零开始,到稳定产出,每一步都清晰可操作。 1. 为什么说“拖图就出结果”不是宣传话术? 很多多模态模型标榜“支持图文理解”,但实际用起来才发现:要装依赖、改路径、调精度、修CUDA版本、

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.