前端常用6种数据加密方式的使用详解

在前端开发中,数据加密是一个重要的安全措施,可以保护用户数据不被轻易窃取或篡改。以下是六种常用的前端数据加密方式及其示例代码和详细讲解:

 

1. Base64 编码

Base64 是一种基于64个可打印字符来表示二进制数据的表示方法。它不是一种加密方法,而是一种编码方式。

示例代码:

// 使用 Base64 编码
const encodedData = btoa('Hello, World!');
console.log('Encoded Data:', encodedData); // Output: SGVsbG8sIFdvcmxkIQ==// 使用 Base64 解码
const decodedData = atob(encodedData);
console.log('Decoded Data:', decodedData); // Output: Hello, World!

讲解:

  • btoa 函数用于将字符串编码为 Base64。

  • atob 函数用于将 Base64 编码的字符串解码为原始字符串。

 

2. MD5 哈希

MD5 是一种广泛使用的哈希函数,可以产生出一个128位(16字节)的哈希值。

示例代码:

const crypto = require('crypto');// 使用 MD5 哈希
const hash = crypto.createHash('md5').update('Hello, World!').digest('hex');
console.log('MD5 Hash:', hash); // Output: 6cd3556deb0da54bca060b4c39479839

讲解:

  • 使用 Node.js 的 crypto 模块创建一个 MD5 哈希对象。

  • update 方法用于更新要哈希的数据。

  • digest 方法用于生成最终的哈希值,并以十六进制格式输出。

 

3. SHA-256 哈希

SHA-256 是一种更安全的哈希算法,产生一个256位(32字节)的哈希值。

示例代码:

const crypto = require('crypto');// 使用 SHA-256 哈希
const hash = crypto.createHash('sha256').update('Hello, World!').digest('hex');
console.log('SHA-256 Hash:', hash); // Output: 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3

讲解:

  • 使用 Node.js 的 crypto 模块创建一个 SHA-256 哈希对象。

  • update 方法用于更新要哈希的数据。

  • digest 方法用于生成最终的哈希值,并以十六进制格式输出。

 

4. AES 对称加密

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

示例代码:

const crypto = require('crypto');const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);// 加密
function encrypt(text) {let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv);let encrypted = cipher.update(text);encrypted = Buffer.concat([encrypted, cipher.final()]);return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') };
}// 解密
function decrypt(text) {let iv = Buffer.from(text.iv, 'hex');let encryptedText = Buffer.from(text.encryptedData, 'hex');let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), iv);let decrypted = decipher.update(encryptedText);decrypted = Buffer.concat([decrypted, decipher.final()]);return decrypted.toString();
}const encrypted = encrypt('Hello, World!');
console.log('Encrypted Data:', encrypted);const decrypted = decrypt(encrypted);
console.log('Decrypted Data:', decrypted);

讲解:

  • 使用 Node.js 的 crypto 模块创建一个 AES 加密对象。

  • createCipheriv 方法用于创建加密对象,createDecipheriv 方法用于创建解密对象。

  • update 方法用于更新要加密或解密的数据。

  • final 方法用于生成最终的加密或解密结果。

 

5. RSA 非对称加密

RSA 是一种非对称加密算法,使用公钥进行加密,私钥进行解密。

示例代码:

const crypto = require('crypto');// 生成 RSA 密钥对
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {modulusLength: 2048,publicKeyEncoding: {type: 'spki',format: 'pem'},privateKeyEncoding: {type: 'pkcs8',format: 'pem'}
});// 加密
function encrypt(text) {const buffer = Buffer.from(text);const encrypted = crypto.publicEncrypt(publicKey, buffer);return encrypted.toString('base64');
}// 解密
function decrypt(encrypted) {const buffer = Buffer.from(encrypted, 'base64');const decrypted = crypto.privateDecrypt(privateKey, buffer);return decrypted.toString('utf8');
}const encrypted = encrypt('Hello, World!');
console.log('Encrypted Data:', encrypted);const decrypted = decrypt(encrypted);
console.log('Decrypted Data:', decrypted);

讲解:

  • 使用 Node.js 的 crypto 模块生成 RSA 密钥对。

  • publicEncrypt 方法用于使用公钥加密数据。

  • privateDecrypt 方法用于使用私钥解密数据。

 

6. HMAC 消息认证码

HMAC(密钥散列消息认证码)是一种使用密钥的哈希算法,用于验证数据的完整性和真实性。

示例代码:

const crypto = require('crypto');const key = 'secret-key';// 生成 HMAC
function generateHMAC(text) {return crypto.createHmac('sha256', key).update(text).digest('hex');
}const hmac = generateHMAC('Hello, World!');
console.log('HMAC:', hmac);

讲解:

  • 使用 Node.js 的 crypto 模块创建一个 HMAC 对象。

  • createHmac 方法用于创建 HMAC 对象,指定哈希算法和密钥。

  • update 方法用于更新要生成 HMAC 的数据。

  • digest 方法用于生成最终的 HMAC 值,并以十六进制格式输出。

 

这些示例代码展示了前端常用的六种数据加密方式,每种方式都有其特定的用途和优势。在实际应用中,应根据具体需求选择合适的加密方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3的requests库,超时参数timeout设置和异常捕获

在Python的requests库中,get()和post()方法都接受一个名为timeout的参数,该参数用于设置请求的超时时间。如果你没有为这些方法设置timeout参数,那么默认情况下它们可能会等待很长时间,直到服务器响应或连接失败。 在Python的req…

Redis 高可用 sentinel

简介 Sentinel提供了一种高可用方案来抵抗节点故障,当故障发生时Redis集群可以自动进行主从切换,程序可以不用重启。 Redis Sentinel集群可以看成是一个Zookeeper集群,他是Redis集群高可用的心脏,一般由3-5个节点组成&#xff0…

人体接近传感器,ATM微波传感器,人体存在传感器 微波探测器YTMW8631

人体接近传感器,ATM微波传感器,人体存在传感器 微波探测器YTMW8631 史新华 批发Atm微波探测器,Atm传感器人体接近传感器,Dvr录像机专用微波感应器,Atm机录像系统专用感应器 微波传感器的多领域应用 微波探测器是利用微波的多普勒效应来探测运动物体&…

Linux系统编程——进程信号

目录 一,信号预备 1.1 生活中的信号 1.2 技术应用中的信号 1.3 signal函数捕捉信号 1.3 信号的发送与记录 1.4 信号的常见处理方式 二,信号的产生 2.1 核心转储 2.1.1 环境配置 2.1.2 利用core文件进行调试 2.1.3 core dump标志 2.2 通过系统…

程序猿大战Python——文件操作、异常、模块——导入模块

导入模块的方式 目标:了解导入模块的方式有哪些? 模块指的是:以.py结尾的Python文件。 注意:模块名属于标识符。 在模块中,能定义函数、变量和类等,也能包含其他一些可执行的代码,比如print(x…

【ClickHouse】简介入门、Clickhouse的特点、ClickHouse 的安装(一)

简介 ClickHouse入门 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 ClickHouse的特…

【质量】软件系统数据质量管理过程(Word原件)

软件系统数据做数据质量管理至关重要,原因有四: 首先,数据质量直接影响软件系统的性能和用户体验。高质量的数据能够确保系统稳定运行,提供准确、可靠的信息支持,从而增强用户的满意度和信任度。 其次,数据…

集团门户网站的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,论坛管理,集团文化管理,基础数据管理,公告通知管理 前台账户功能包括:系统首页,个人中心,论坛&#xff0…

仓库管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,公告管理,物资管理,基础数据管理,用户管理 用户账户功能包括:系统首页,个人中心,公告管理,物…

Stable Diffusion AI绘画助力建筑设计艺术创新——城市建筑设计大模型分享

大家好,我是向阳 今天我将针对建筑设计方面的AI大模型进行简单介绍,我们将通过富有想象力的关键词或结合Stable Diffusion 的ControlNet 给原本只有黑白线条的线稿变成彩色的效果图,可能你只需要短短几分钟就可以让黑白线稿变成几种甚至十几种…

【操作系统】操作系统实验03-页面置换算法

题目要求: 先读懂实验文档中的两个页面置换算法,参考文档中程序,实现以下要求: 假设某个进程P有6个页面,进程访问页的顺序自拟(不少于20个),在内存中分配给该进程4个页面&#xff…

web安全渗透测试十大常规项(一):web渗透测试之XML和XXE外部实体注入

#详细点: XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具。等同于JSON传输。XXE漏洞XML External Entity Injection,即xml外部实体注入漏洞,XXE漏洞发…

使用react-markdown 自定义组件在 Next.js 中进行渲染

在这篇文章中,我们将讨论如何在Next.js项目中使用react-markdown库来渲染Markdown内容,并自定义组件以扩展Markdown的功能。我们将使用TypeScript来确保代码的类型安全性。 Markdown是一种轻量级标记语言,常用于编写文档、博客等。react-mar…

【JavaScript脚本宇宙】用这些令人惊叹的库,让你的音频动起来!

创造惊人音效:六大音频处理库实操指南 前言 随着数字音频技术的发展,越来越多的库和工具被开发出来,用于处理音频数据。这些库可以用于各种应用场景,如音频可视化、声音合成、音频分析等。本文将介绍几个常用的音频处理库&#…

Java实现一个解析CURL脚本小工具

该工具可以将CURL脚本中的Header解析为KV Map结构;获取URL路径、请求类型;解析URL参数列表;解析Body请求体:Form表单、Raw Body、KV Body、XML/JSON/TEXT结构体等。 使用示例 获取一个http curl脚本: curl --locatio…

【YOLOv8改进[注意力]】使用CascadedGroupAttention(2023)注意力改进c2f + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中使用CascadedGroupAttention注意力改进c2f 的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 CascadedGroupAttention 二 使用CascadedGroupAttention…

反激开关电源X电容的放电电阻选型及计算

1、封装 1206 2、电压Vmax200V 3、电流Imax2A 4、功率Pmax1/4W不超过一半 阻值RC1(根据安规快速计算) 信息技术设备的安全,国家标准:GB4943-2011等同于UL60950 具体放电计算 初始电压为E的电容C通过R放电 V0E V0为电容上初始电压…

MySQL如何实现事务特性

目录 事务有那些特性 原子性如何实现 持久性如何实现 隔离性与一致性如何实现 事务有那些特性 事务是由MySQL的引擎 InnoDB 来实现的 事务的特性 : 原子性 不存在中间状态,要么完成,要么不完成 一致性 事务操作前和操作后,数据满足完整性的约束,数据库保持一致的状态…

SYD88xx使代码在RAM内存中执行/运行

SYD88xx使代码在RAM中执行 SYD8811/8810默认都是cache模式的,但是在代码首次运行的时候,需要将代码从flash搬到cache中执行,这样第一次的代码执行可能会比较慢,这里提供一个将需要提速的代码放到RAM中执行的方法。 对于SYD8811…

C# OCCT Winform 选中模型改变状态

选中状态设置 _context new AIS_InteractiveContext(_viewer);var selectionDrawer new Prs3d_Drawer();selectionDrawer.SetColor(Colors.Selection);selectionDrawer.SetDisplayMode(1);selectionDrawer.SetTransparency(0.1f);_context.SetSelectionStyle(selectionDrawe…