js实现数据加密,jwt加密方式

news2024/11/24 7:09:17

一个简单的数据加密

const crypto = require("crypto");

// 普通的数据加密
function sign(msg,key){ // 原始信息,密钥 String
    // "sha256" :加密的算法,key :密钥,msg :要加密的信息,"hex" :转成16进制字符串
    return crypto.createHmac("sha256",key).update(msg).digest("hex");
}
console.log(sign("123","aaa"));

通过crypto包的加密方法,以及设置密钥和对应的算法,可以将简单的数据进行加密得到一个字符串:

“a35c465aac6252eb6de876fccd8769b2d1f0310cf51452f927247125a9576b24”

这个字符串是不可逆的,要验证数据,只能将数据和原来的密钥还有算法,重新加密对比,

但是加密数据通常在后端进行,这种直接加密的方式,需要拿到原本的数据进行加密比对,而原本真实的数据频繁进入网络传输会增加被拦截的风险,容易泄露个人隐私信息,

jwt 加密

        JSON Web Token (JWT) ,一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于将信息作为 JSON 对象在各方之间安全地传输。此信息可以验证和信任,因为它是数字签名的。可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对 JWT 进行签名。

简单来说就是,一串由公钥或私钥加密的,有时间戳的,有结构的,可解码的json字符串 ,

        当加密的数据(token)生成后,一般会返回给客户端保存,每次客户端发起请求时,都会在头部携带上这个数据,后端收到数据后,会优先验证这个数据的有效性(有无被修改,或者时间过期)再决定是否返回数据,这样就完成了一次身份验证,而这种方式,大部分时间传输的都是token数据,在没有密钥的情况下很难从中破译出有用的信息

jwt的结构

// 数据头 加密算法,加密模式 

header :{"alg":"sha256","type":"jwt"},

// 数据主体

payload :{"username":"Tom","password":123}

// 加密后的数据码

signature: 

// 加密后的数据格式(用2个'.'隔开)

xxxxx.yyyyy.zzzzz

jwt的加密流程:数据json化进行密钥和指定算法加密,得到base64编码化的字符串

jwt加密的模拟示例

// jwt模式 json web token : 数据json化进行密钥和指定算法加密,得到base64编码化的字符串
// 初始数据
let data = {
    // 数据头 加密算法,加密模式
    header:{"alg":"sha256","type":"jwt"},
    // 数据主体 真实数据中一般还有时间戳
    payload:{"username":"Tom","password":123}
}
// base64字符转换 btoa() atob(),编码方式非加密,可相互转换
console.log(btoa(JSON.stringify(data)));
console.log(atob(btoa(JSON.stringify(data))));

// 原始数据集,密钥
function jwt(data,key){
    // 数据头base64转换
    let header = btoa(JSON.stringify(data.header));
    // 数据主体base64转换
    let payload = btoa(JSON.stringify(data.payload));
    // 获得加密的数据
    let hash = crypto.createHmac(data.header.alg,key).update(header+"."+payload).digest("hex");
    // 加密的数据base64转换
    let signature = btoa(hash);
    return  header+"."+payload+"."+signature;
}
let msg = jwt(data,"aaa");
console.log(msg);

// 完整数据
let endData ={
    // 数据头 加密算法,加密模式
    header : data.header,
    // 数据主体 
    payload : data.payload,
    // 加密后的数据码
    msg : msg
}
console.log(endData);

// 验证完整数据
function isTrue(endData){
// 在完整数据中,通过‘aaa’密钥和数据中指定的加密算法、模式,生成加密数据,对比msg中的数据
    if( jwt(endData,"aaa") === endData.msg){
        return true;
    }else{
        return false;
    }
}

console.log(isTrue(endData));

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

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

相关文章

攻击者开始使用 XLL 文件进行攻击

近期,研究人员发现使用恶意 Microsoft Excel 加载项(XLL)文件发起攻击的行动有所增加,这项技术的 MITRE ATT&CK 技术项编号为 T1137.006。 这些加载项都是为了使用户能够利用高性能函数,为 Excel 工作表提供 API …

【Mac】XnViewMP for Mac(图片浏览查看器)及同类型软件介绍

软件介绍 XnViewMP 是一款多功能、跨平台的图像查看和管理软件,适用于 macOS、Windows 和 Linux 系统。它是经典 XnView 软件的增强版本,更加现代化且功能更强大。XnViewMP 支持数百种图像格式,并提供多种图像处理工具,使其成为摄…

基于Java微信小程序自驾游拼团设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展

6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…

集群分布式储存

硬件: 存储柜 软件 : software define storage 分布式存储 是一种独特的系统架构由一组能够通过网络连通,为了完成共同任务而协调任务的计算机节点组成分布式是为了使用廉价的普通的计算机完成复杂的计算和存储任务目的就是利用更多的机…

Sam Altman:从少儿奇才到OpenAI掌舵人

自2022年底发布了ChatGPT以来,OpenAI及其首席执行官Sam Altman迅速成为科技界的焦点人物。Altman的崛起并非偶然,而是长期以来不断追求权力和创新的结果。本文将回顾Altman的成长历程,探索他如何一步步走向OpenAI的顶峰。 童年与教育背景 S…

JavaWeb系列十九: jQuery的DOM操作 上

查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用jQuery对象的attr()方法用来 设置/返回 它的各种属性值 设置属性值 $(“img”).attr(“width”, “300”);返回属性值 $(“img”).attr(“width”); 创建节点 创建节点: 使用jQuery的工厂函数$(): $(html标…

WPS复制后转置粘贴

1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置,如下图: 2. Excel office365 本地版 2. Excel office365 在线版

Linux下执行C++程序

编译 一步到位的编译: g cpp文件 # 此时默认生成一个a.out的可执行程序 g cpp文件 -o 可执行程序名称 # 此时可以自定义可执行程序的名称 分步编译: # 1.预处理(Pre_processing) # 功能:将源程序头文件展开、删除注释、宏替换 g -E cpp文件…

Redis 7.x 系列【6】数据类型之字符串(String)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 GETSET2.6 STRLEN2.7 SETEX2.8…

0625_ARM2

练习: 汇编实现1-100累加,结果保存在r0 .text .global _start start:mov r0,#0mov r1,#1b loop loop:add r0,r0,r1add r1,r1,#1cmp r1,#101bne loop .end思维导图:

EPLAN页属性批量修改

在使用EPLAN软件时,项目数据量大的时候,需要修改页属性,每一页单独修改会很繁琐,这里介绍如何批量修改页属性: 在EPLAN里点击“工具----从外部编辑属性------导出数据” 这里按图示可定义保存位置,和输出方…

感谢5年前的自己

感谢CSDN提醒,惊讶发现在CSDN上写作已经5年了,感叹时光如梭,感谢CSDN提供了这个技术交流分享平台,让我可以在这个平台上搜索到许多疑难问题的解决方案,也让自己在分享中不断加深问题解决方法的理解 初衷 写作初衷大概…

2024年软考架构设计师终于PASS啦

文章目录 系统架构设计师是什么考试要求考试科目个人心得综合知识上午案例下午论文 系统架构设计师是什么 系统架构设计师,属于计算机技术与软件(高级)专业技术资格。考试合格人员能够根据系统需求规格说明书,结合应用领域和技术…

数据增强 data augmentation(在PyTorch中,data_transforms通常用于数据集处理,并且经常用于数据增强)

数据增强是一种在训练深度学习模型时,通过对输入数据进行变换和修改的方法,以增加训练数据集的大小和多样性,从而提高模型的泛化能力和性能。 PS: PyTorch中,data_transforms具体使用代码可以查看这篇文章: pytor…

QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f = int(1)/ int(2)= 0

目录 引出除法的一个坑 总结自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 引出 QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f int&#xf…

网络安全事件研判

研判(入侵检测) 研判我理解为人工层面对入侵检测事件进行再分析,即借助已有的设备告警根据经验判断是否为真实攻击 研判工作要充分利用已有安全设备(需要提前了解客户的网络拓扑以及部署设备情况),分析其近…

幂法 Euler法

一、实验原理 根据幂法,Euler法的相关知识和算法编程完成本实验 二、实验内容 见第7章PPT:用规范化幂法计算下面矩阵的按模最大特征值及对应的特征向量 见第8章PPT:分别用简单欧拉法和改进欧拉法对如下初值问题作验证性计算 三、实验过程&a…

rga_mm: RGA_MMU unsupported Memory larger than 4G!解决

目录 报错完整log如下:解决方案:报错完整log如下: [ 3668.824164] rga_mm: RGA_MMU unsupported Memory larger than 4G! [ 3668.824305] rga_mm: scheduler core[4] unsupported mm_flag[0x0]! [ 3668.824320] rga_mm: rga_mm_map_buffer map dma_buf err