首页 > 其他分享 >前端常用6种数据加密方式的使用(最详解)

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

时间:2024-10-17 11:58:56浏览次数:1  
标签:const 示例 encrypted 前端 crypto SHA 详解 加密

原文链接:https://blog.csdn.net/2401_82471222/article/details/140538952

前端常用的六种数据加密方式包括Base64编码、MD5加密、SHA-1加密、SHA-256加密、AES加密和RSA加密。每种加密方式都有其特定的使用场景和优缺点。以下是这些加密方式的详细使用说明:

1. Base64编码
定义与特点:

Base64是一种基于64个可打印字符来表示二进制数据的编码方法,并非加密算法。
它通过将二进制数据每3个字节转换成4个字节的可打印字符,实现对数据的编码。
使用场景:

主要用于在URL、Cookie、网页中传输少量二进制数据。
内嵌小图片以减少服务器访问次数。
优缺点:

优点:算法简单,对性能影响不大,适合不同平台、不同语言的传输。
缺点:增加数据体积约1/3,无法缓存,大文件时消耗CPU资源。
示例代码:

// 编码
const encodedData = btoa('Hello, World!');
console.log('Encoded Data:', encodedData); // SGVsbG8sIFdvcmxkIQ==

// 解码
const decodedData = atob(encodedData);
console.log('Decoded Data:', decodedData); // Hello, World!

  

2. MD5加密
定义与特点:

MD5是一种广泛使用的哈希函数,产生128位(16字节)的哈希值。
不可逆,常用于验证数据的完整性。
使用场景:

密码存储(尽管不推荐直接用于密码存储,因为存在碰撞风险)。
文件校验等。
优缺点:

优点:计算速度快,效率高。
缺点:存在碰撞风险,不可逆,安全性较低。
示例代码(使用Node.js的crypto模块):

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

  

3. SHA-1加密
定义与特点:

SHA-1是一种安全哈希算法,产生160位(20字节)的哈希值。
相比于MD5,安全性更高,但速度稍慢。
使用场景:

数字签名、文件校验等。
优缺点:

优点:安全性高于MD5。
缺点:存在理论上的碰撞可能,速度较慢。
注意:由于SHA-1已被认为不再安全,建议使用SHA-256或更高版本的SHA算法。

4. SHA-256加密
定义与特点:

SHA-256是SHA-2算法族中的一员,产生256位(32字节)的哈希值。
比SHA-1更安全,速度也相当快。
使用场景:

广泛用于密码存储、文件校验、数字签名等。
优缺点:

优点:安全性高,速度快。
缺点:相比MD5和SHA-1,计算复杂度稍高。
示例代码(使用Node.js的crypto模块):

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

  

5. AES加密
定义与特点:

AES(高级加密标准)是一种对称加密算法,使用相同的密钥进行加密和解密。
支持多种密钥长度(如128位、192位、256位)。
使用场景:

本地数据加密、HTTPS通信、网络传输等。
优缺点:

优点:算法公开、计算量小、加密速度快、效率高。
缺点:安全性依赖于密钥的保密性,密钥管理复杂。
示例代码(使用Node.js的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, iv, key) {
    let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), Buffer.from(iv, 'hex'));
    let decrypted = decipher.update(Buffer.from(text, 'hex'));
    decrypted = Buffer.concat([decrypted, decipher.final()]);
    return decrypted.toString();
}

// 示例使用
const originalText = 'Hello, World!';
const encrypted = encrypt(originalText);
console.log('Encrypted:', encrypted);

const decryptedText = decrypt(encrypted.encryptedData, encrypted.iv, key.toString('hex'));
console.log('Decrypted:', decryptedText);

  

注意:上面的示例代码中,key 和 iv(初始化向量)是在加密函数内部随机生成的,这在实际应用中可能会导致问题,因为解密时你需要相同的 key 和 iv。通常,你会在加密时安全地存储或传输这些值,以便解密时可以使用。

6. RSA加密
定义与特点:

RSA是一种非对称加密算法,使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。
安全性高,但加密和解密过程比对称加密更慢。
使用场景:

数据加密、数字签名等,特别是在需要公开加密密钥的场合。
优缺点:

优点:安全性高,适用于分布式系统。
缺点:加密和解密速度较慢,密钥生成复杂。
示例代码(使用Node.js的crypto模块):

const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 2048,
    publicKeyEncoding: {
        type: 'spki',
        format: 'pem',
    },
    privateKeyEncoding: {
        type: 'pkcs8',
        format: 'pem',
    }
});

function encryptRSA(text, publicKey) {
    const buffer = Buffer.from(text);
    const encrypted = crypto.publicEncrypt(publicKey, buffer);
    return encrypted.toString('base64');
}

function decryptRSA(text, privateKey) {
    const buffer = Buffer.from(text, 'base64');
    const decrypted = crypto.privateDecrypt(privateKey, buffer);
    return decrypted.toString('utf8');
}

// 示例使用
const encrypted = encryptRSA(originalText, publicKey);
console.log('RSA Encrypted:', encrypted);

const decryptedText = decryptRSA(encrypted, privateKey);
console.log('RSA Decrypted:', decryptedText);

  以上示例提供了在Node.js环境下使用不同加密算法的基础方法。每种加密方式都有其特定的应用场景和限制,正确选择和使用这些算法对于保护数据安全和隐私至关重要。

标签:const,示例,encrypted,前端,crypto,SHA,详解,加密
From: https://www.cnblogs.com/Dongmy/p/18471792

相关文章

  • MyBatis 动态 SQL 详解
    1.什么是动态SQL?在使用MyBatis进行数据库查询时,可能会遇到一些需要根据条件动态生成SQL语句的情况。MyBatis提供了强大的动态SQL支持,通过标签和条件语句,可以让SQL语句根据不同的输入参数动态生成。这大大提高了代码的灵活性,避免了拼接SQL语句的繁琐和出错风险。......
  • Vue3中 watch、watchEffect 详解
    Vue3中watch、watchEffect详解   1.watch的使用 监听ref定义的响应式数据 <template><div><div>值:{{count}}</div><button@click="add">改变值</button></div></template><script>import{r......
  • Python join()函数使用详解
    在Python中,join()函数是字符串的一个方法,用于将一个可迭代对象(如列表)中的元素连接成一个字符串。join()函数的语法如下:string.join(iterable)其中,string是连接中的字符串,iterable是要连接的可迭代对象。下面是join()函数的使用示例:#连接列表中的元素my_list=['Hello',......
  • [MyBatis-Plus]核心功能详解
    条件构造器MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求Wrapper条件构造器专门用于构造复杂的查询条件BaseMapper提供很多增删改查的方法,其中的Wrapper就是用于构建复杂查询条件的Wrapper的继承体系Wrapper是最顶级的父类AbstractWrapper继......
  • Linux nohup 命令详解
    文章目录Linux`nohup`命令详解基本语法`nohup`工作原理实用示例示例1:运行一个脚本并保持后台执行示例2:指定输出文件示例3:结合`sleep`命令使用`jobs`和`bg`管理后台进程使用`ps`和`kill`管理进程常见的`nohup`参数结合`nohup`和`cron`注意事项结论......
  • Linux rm命令详解
    文章目录Linux`rm`命令详解基本语法常用参数详解常见用法和示例注意事项实践示例结论参数表格Linuxrm命令详解rm(remove)命令用于删除文件或目录,是Linux系统中最常用的文件管理命令之一。rm命令具有强大的功能,可以删除单个文件、多个文件,甚至递归删除整个目录......
  • ThreeJS入门(123):THREE.Skeleton 知识详解,示例代码
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,webgl,ThreeJS,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第123篇入门文章......
  • C++ [NOIP1999 提高组] 邮票面值设计 详解
    C++[NOIP1999提高组]邮票面值设计详解题目背景题目描述输入格式输出格式样例#1样例输入#1样例输出#1完整代码(你们最想要的):[NOIP1999提高组]邮票面值设计题目背景除直接打表外,本题不保证存在正确且时间复杂度可以通过全部数据做法。由于测试数据过水,部......
  • 前端入门学习之css盒子原则
    文章目录前端入门学习之css盒子原则引入块级元素:块级元素的特点占据整行设置高度和宽度包含其他元素盒子原则:margin:例子:boder:padding:前端入门学习之css盒子原则引入块级元素:当一个html标签元素展示方式为block,也就是它的display属性为block,那么我们可以想......
  • 前端开发设计模式——命令模式
    目录一、命令模式的定义和特点1.定义:         2. 特点:二、命令模式的结构与原理1.结构:2.原理:三、命令模式的实现方式1.定义接口命令:2.创建具体的命令类:3.定义接收者:4.创建调用者:四、命令模式的使用场景1.界面按钮的点击操作:    1.1 ......