前端常用加密方式使用

前端常用加密方式使用

文章目录

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

Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战

Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 shelf_web_socket 的鸿蒙化适配指南 - 实现具备高性能全双工长连接与协议协商能力的端侧服务端架构、支持分布式实时信令与多端协同实战 前言 在进行 Flutter for OpenHarmony 开发时,当我们的鸿蒙应用需要充当“控制中心”角色(如控制智能家居、开启本地调试服务或实现 P2P 实时对抗脚本时),如何在端侧直接拉起一个支持 WebSocket 协议的高性能微服务端?shelf_web_socket 是针对 shelf 后端框架封装的一款官方级 WebSocket 处理器。本文将探讨如何在鸿蒙端构建极致、透明的长连接交互引擎。 一、原直观解析 / 概念介绍 1.1 基础原理 该库本质上是一个 shelf 处理函数(Handler)

【LLM】Ollama:本地大模型 WebAPI 调用实战指南

1. 为什么选择Ollama部署本地大模型 最近两年大模型技术发展迅猛,但很多开发者面临一个现实问题:公有云API调用不仅费用高昂,还存在数据隐私风险。Ollama的出现完美解决了这个痛点,它就像是你本地的模型管家,可以一键部署各种开源大模型。我去年在开发智能客服系统时就深受其益,既避免了敏感客户数据外泄,又省下了大笔API调用费用。 与传统方案相比,Ollama有三大优势:首先是安装简单,用Docker一条命令就能跑起来;其次是模型丰富,支持Llama、Mistral等主流开源模型;最重要的是API标准化,完全兼容OpenAI的接口规范。实测在16GB内存的MacBook Pro上运行7B参数的模型,响应速度可以控制在2秒以内,完全能满足大多数应用场景。 2. 五分钟快速搭建Ollama环境 2.1 准备工作就像搭积木 在开始之前,我们需要准备两个基础组件:Docker和Python环境。这里有个小技巧分享——建议使用Docker Desktop的WSL2后端(Windows用户),性能比传统虚拟机模式提升30%以上。安装完成后,记得执行以下命令验证版本: docker

Java Web 开发:JSON 基础 + @Test 测试 + Cookie/Session/ 请求处理

Java Web 开发:JSON 基础 + @Test 测试 + Cookie/Session/ 请求处理

个人主页:♡喜欢做梦 欢迎  👍点赞  ➕关注  ❤️收藏  💬评论 目录 编辑 🍍JSON的概念  🍐概念  🍐@Test注解 🍑什么是@Test? 🍑与JSON关联 🍑@Test标记的方法与main方法的区别  🍍JSON语法  🍐核心数据类型  🍐常见使用 🍑对象 🍑数组  🍑JSON字符串和Java对象的互转 🍑传递JSON 🍑获取URL中的参数 🍑上传文件:@RequestPart  🍍Cookie和Seeion  🍐Cookie 🍑什么是Cookie? 🍑Cookie的获取  🍐Session 🍑什么是Session?  🍐Cookie和Session之间的关系 🍑Session的存储 🍑Session的获取 🍍获取header 🍍JSON的概念  🍐概念 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。他基于JavaScript的一个子集,但采用了独立语言的文

【前端】win11操作系统安装完最新版本的NodeJs运行npm install报错,提示在此系统上禁止运行脚本

【前端】win11操作系统安装完最新版本的NodeJs运行npm install报错,提示在此系统上禁止运行脚本

🌹欢迎来到《小5讲堂》🌹 🌹这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹 目录 * 前言 * 解决方案 * 方法1:以管理员身份运行 PowerShell 并更改执行策略 * 方法2:只为当前会话临时允许 * 方法3:使用命令提示符 (CMD) * 方法4:绕过策略执行单个脚本 * 推荐解决方案 * Node.js 详细介绍 * 什么是 Node.js? * 核心特点 * 1. **非阻塞 I/O 和事件驱动** * 2. **单线程但高并发** * 架构组成 * 1. **V8 JavaScript 引擎** * 2. **LibUV 库** * 3. **核心模块** * 安装与使用