前端加密-解密方式

加密/解密应用场景

  • 前言: 通常在前后端之间数据传输经常会涉及到一些敏感数据、cookie携带的token加密等问题。

  • 提到加密,相对于后台开发来说,遇到最多的需要加密处理的应用场景应该是接口的加密签名校验了。不过这种一般都用于服务端与服务端之间的相互调用。因为没有暴露在外的代码这种加密校验相对比较安全。但javaScript不一样,它是运行在浏览器端的一种脚本语言。基本除了在sojson.v6加密过的js代码,黑客可以通过逆向分析你的js代码来盗取一些数据。

常用的js加密:

  • 对称加密(AES):用的同一个密钥进行加解密的

优点: 速度快

缺点: 在传输密钥过程中,这个密钥容易被拦截,导致密钥泄漏,安全性不高

  • 非对称加密(RSA): 生成密钥,分别为公钥和秘钥,公钥对数据进行加密,私钥对数据进行解密

优点: 只需要服务端把公钥,传递给前端,前端通过公钥进行加密,服务端通过私钥解密,安全性很高

缺点: 速度慢

1、 js内置api(escape和unescape)
const code = 'hello world';

const _enCode = escape(code); // 加密

const _unescapeCode = unescape(code); // 解密

console.log('加密code前:', code); // 加密code前: hello world

console.log('加密code后:',_enCode); // 加密code后:hello%20world

console.log('解密code后:', _unescapeCode); // 解密code后: hello world

由此可以看到用escape函数加密后,字符变成了%开头形式的特殊编码。需要用unescape反编译回来。escape/unescape通常应用于url中携带数据加密较为多些。

2、md5加密

我这里演示借助了crypto插件(项目里安装了),没有的话可以自行安装一下,安装地址: https://github.com/brix/crypto-js

import Crypto from "crypto";

const user_key = 'md5_121212';

const passWord = Crypto.createHash('md5').update(`${user_key}\n`).digest('hex');

console.log('passWord:', passWord);

MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。md5加密一般用于确保文件和代码的唯一性,可以根据计算代码的md5值来判断代码是否被改变。不过md5属于对称加密范畴。

3、 des/aes加密方式

DES是一种使用密钥加密的块算法,已被美国联邦政府的国家标准局授权在非密级政府通信中使用

我这里演示借助了crypto插件(项目里安装了),没有的话可以自行安装一下,安装地址: https://github.com/brix/crypto-js

import crypto from "crypto";

const message = 'hello des';

const key = 9727;

const keyHex = crypto.enc.Utf8.parse(key);

const encrypted = crypto.DES.encrypt(
    message,
    keyHex,
    {

        mode: crypto.mode.ECB,

        padding: crypto.pad.Pkcs7,

    }
);
// 打印加密结果
console.log(encrypted.toString());
4、 RSA双向加密解密
  • RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

  • 使用:服务端和客户端分别生成自己的RSA密钥,服务端拿客户端的公钥,客户端拿服务端的公钥,彼此的数据都可以加解密,但是缺点很明显,就是加解密数据速度慢。

插件安装地址: https://github.com/rzcoder/node-rsa

import rsa from 'node-rsa';

const key = new rsa({b: 512});

const text = 'hello rsa!';

// 加密

const encrypted = key.encrypt(text, 'base64');
// 打印加密结果

console.log(encrypted);

// 解密

const decrypted = key.decrypt(encrypted, 'utf8');
// 打印解密结果
console.log(decrypted);

以上介绍了几种加密方式,希望可以帮助得到你,有错误也可指出可以互相交流交流。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值