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

一个简单的数据加密

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));

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表: 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项: 在Dropdown的Options属性中添加新的选项,通过点击按钮来添加选项,并为每个选项设置一个显示名…

创建github个人博客

文章目录 安装Hexo安装git安装Node.js安装 Hexo 安装Hexo 参考官方文档:https://hexo.io/zh-cn/docs/ Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他标记语言)解析文章,在几秒内,即可利用靓丽的…

springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?

上一节我们简单阐述了springboot多数据源如何配置。在实际的业务场景中我们常常遇到A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库中。为何要这么做呢?比如B服务是日志SDK,A服务集成B服务来实现记录日志的功能,但是日…

Stable Diffusion 3 正式开源,超强文生图模型 SD3-M 上线,赶紧来试试吧!

前言 我们都知道 Stable Diffusion 3 是一款强大的文生图模型,拥有20亿参数,因其高效的推理速度和卓越的生成效果而备受瞩目。 近日,Stability AI在推特上宣布正式开源了 Stable Diffusion 3 Medium(SD3-M) 权重&…

网络编程篇: HTTPS协议

一.前置知识 早期很多公司刚起步的时候,使用的应用层协议都是HTTP,而HTTP无论是用GET方法还是POST方法传参,都是没有经过任何加密的,因此早期很多的信息都是可以通过抓包工具抓到的。 为了解决这个问题,于是出…

网络安全事件研判

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

【SQL Server数据库】关系模式与关系代数

目录 一、请用关系代数完成下列查询 1. 求 供应工程J1 零件P1的供应商号码SNO; 2. 求 供应工程J1 零件(P)为红色 的供应商号码SNO; 3. 求 没有使用 天津供应商(P)生产的红色零件(S&#xff0…

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

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

六款顶级原型设计工具推荐,满足你所有需求!

即时设计作为一款专业原型工具,无论是从功能还是插件库配备情况来看,都是毫无疑问可以进行原型图设计的,而且,即时设计内设海量资源库,可以支持大家通过关键词进行搜索相关资源,并且在线编辑使用&#xff0…

2024年最新中级会计职称考试题库。

46.甲将一汇票背书转让给乙,但该汇票上未记载乙的名称。其后,乙在该汇票被背书人栏内记载了自己的名称。根据《票据法》的规定,下列有关该汇票背书与记载效力的表述中,正确的是()。 A.甲的背书无效&#x…

DVWA 靶场 JavaScript 通关解析

前言 DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

项目实训-vue(十三)

项目实训-vue(十三) 文章目录 项目实训-vue(十三)1.概述2.处理按钮 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.处理按钮 实现了图片的上传之后,还需要设置具体的上传按钮。 这段代码使用 Element UI 的 …

Python:浅谈迭代器、生成器与协程的演化路径

“人生苦短,我用Python”,虽然说大量数学和统计分析库是一个重要优势,但是归根结底,Python的最大优势就是三点: 但是通常一般来讲,当扯到并发的时候,无论是多服务器、多进程、多线程、还是协程&…

SHELL/作业/2024/6/25

终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 #!/bin/basha$1b$2 if [ $a -eq $b ]then echo "ab"elif [ $a -gt $b ]thenecho "a>b"elseecho "a<b"fi2.已知网址www.hqyj.com…

Zookeeper 三、Zookeeper基本使用

1.Zookeeper系统模型 1&#xff09;Zookeeper数据模型之ZNode 在Zookeeper中&#xff0c;数据信息被保存在一个个数据节点上&#xff0c;这些节点被称为ZNode。ZNode是Zookeeper中最小数据单位&#xff0c;在ZNode下面又可以再挂ZNode&#xff0c;这样一层层下去就形成了一个…

JVM专题十:JVM中的垃圾回收机制

在JVM专题九&#xff1a;JVM分代知识点梳理中&#xff0c;我们主要介绍了JVM为什么采用分代算法&#xff0c;以及相关的概念&#xff0c;本篇我们将详细拆分各个算法。 垃圾回收的概念 垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;确实是计算机编程中的…

详解如何在分数限制下,选好专业还是选好学校?

系列文章目录 1、选好专业还是选好学校&#xff1f; 2、具体分段考虑 3、博主给学子的建议 文章目录 系列文章目录前言一、稳定军心二、鱼与熊掌真不可兼得吗&#xff1f;1.兴趣和职业规划2.专业实力3.就业前景4.个人发展 三、具体分段考虑1、高分段考生2、次高分段考生3、中…

住宅IP代理服务终极指南:增强安全性和可访问性

在当今的数字安装程序中&#xff0c;隐私和可访问性对于企业和个人都至关重要。满足这些需求的一个强大工具是住宅 IP 代理服务。这些服务为用户提供住宅 IP 地址&#xff0c;这些地址是互联网产品 (ISP) 计算房主的真实 IP。在本综合指南中&#xff0c;我们将探讨住宅 IP 代理…

手机照片压缩到20k以内免费,这几款心动软件快收好!

在数字化时代&#xff0c;手机拍照已成为我们记录生活的重要方式之一。然而&#xff0c;高清的照片也意味着占用着越来越多的手机存储空间。如果你正在为手机内存告急而烦恼&#xff0c;那么这几款手机照片压缩神器或许能成为你的救星&#xff01;它们不仅可以将照片轻松压缩至…

docker-compose部署Flink及Dinky

docker-compose部署Flink及Dinky 服务器环境&#xff1a;centos7 1. 配置hosts vim /etc/hostsx.x.x.x jobmanager x.x.x.x taskmanager x.x.x.x dinky-mysql2. 文件目录结构 . ├── conf │ ├── JobManager │ │ ├── flink-conf.yaml │ │ ├── log…