Nodejs.用SHA256实现简单的数据安全监控

这次用到的sha256算法, 先看它的基本概念:

对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常有一个长度为64的十六进制字符串来表示,其中1个字节=8位,一个十六进制的字符的长度为4位。

举个栗子

"你好吗"

这个字符串, 经过sha256算法加密后,得到固定且不变的256位的哈希值:

be10ea8c4e5d464cc0e75621ceb360e4167f5dc1b2e4838c15266f28dbb0dc89

画重点: 无论源数据多长或多短, 经过加密后得到的都是一串256位的哈希值

长到你可以放下一个图书馆的内容, 它输出还是256位,其它的都被吞进黑洞了

有了以上基础, 我们来讲标题讲到的内容

假设我们有一条这样的数据在数据库中:

{
    name: "代码大叔",
    money: 100,
    status: "搬砖"
}

money字段存的是用户的存款金额

常规状态下, 假设你开发的系统是无懈可击, 没任何漏洞的.

但是! 但是理论上有数据库维护权限的人,是可以直接打开数据库, 绕过你的系统,直接对数据表进行数据修改(不要抬杠, 要抬你练单杠去)

辣么数据被改后, 在系统层面是看不出来的, 我们用代码模拟演示:Nodejs.用SHA256实现简单的数据安全监控

在系统层面展示和使用数据, 很难分辨数据有没有被攥改

防御的道路千万条, 我们今天走走sha256这一条

思路是: 源数据拼接成字符串 > 进行sha256加密 > 加密结果存放起来 > 使用数据时对比变化 > 输出对比结果,完成

先引用算法模块crypto(新的Nodejs版本中已内置, 老版本的可以自行安装 npm install crypto)

const crypto = require('crypto');

定义一条数据(用以模拟数据库中的数据)

let data = {
    name: "代码大叔",
    money: 100,
    status: "搬砖"
};
console.log("这是原始数据:", data);
let sha256 = crypto.createHash("SHA256");
let key = "dmds";                           //自建一个固定秘钥,要防止改数据的人猜出来
let ysdata = JSON.stringify(data) + key;         //和源数据混在一起
sha256.update(ysdata);                      //加密
let hx = sha256.digest('hex');              //得到加密结果256位哈希值
console.log("sha256加密串:", hx);

运行

Nodejs.用SHA256实现简单的数据安全监控

保存这个加密串, 模拟篡改一下数据

data.money = 500;

然后再按上面的流程加密这条”不正常的数据”Nodejs.用SHA256实现简单的数据安全监控

sha256加密串很明显不一样

一比较就能发现这条数据跟原始状态不一样, 肯定是有异常情况

这样就达成了简单的数据安全验证的要求, 梳理一下步骤:

  1. 原始数据产生时, 生成加密串并存放起来
  2. 当要使用/展现数据时, 再次计算数据的加密串, 并与存放的加密串进行比较
  3. 对比通过, 则证明数据安全, 否则数据有问题

实际使用中, 需要更严谨的步骤, 以及秘钥的保护, 加密串的保存等, 基本就是构建出一个简单又有效的数据安全校验方式

具体怎么用, 小伙伴们自行发挥

PS: 用这个再深入还可以延伸到区块链的概念

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.net/procedure/26095.html

发表评论

登录后才能评论