这次用到的sha256算法, 先看它的基本概念:
对于任意长度的消息,SHA256都会产生一个256位的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常有一个长度为64的十六进制字符串来表示,其中1个字节=8位,一个十六进制的字符的长度为4位。
举个栗子
"你好吗"
这个字符串, 经过sha256算法加密后,得到固定且不变的256位的哈希值:
be10ea8c4e5d464cc0e75621ceb360e4167f5dc1b2e4838c15266f28dbb0dc89
画重点: 无论源数据多长或多短, 经过加密后得到的都是一串256位的哈希值
长到你可以放下一个图书馆的内容, 它输出还是256位,其它的都被吞进黑洞了
有了以上基础, 我们来讲标题讲到的内容
假设我们有一条这样的数据在数据库中:
{
name: "代码大叔",
money: 100,
status: "搬砖"
}
money字段存的是用户的存款金额
常规状态下, 假设你开发的系统是无懈可击, 没任何漏洞的.
但是! 但是理论上有数据库维护权限的人,是可以直接打开数据库, 绕过你的系统,直接对数据表进行数据修改(不要抬杠, 要抬你练单杠去)
辣么数据被改后, 在系统层面是看不出来的, 我们用代码模拟演示:
在系统层面展示和使用数据, 很难分辨数据有没有被攥改
防御的道路千万条, 我们今天走走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);
运行
保存这个加密串, 模拟篡改一下数据
data.money = 500;
然后再按上面的流程加密这条”不正常的数据”
sha256加密串很明显不一样
一比较就能发现这条数据跟原始状态不一样, 肯定是有异常情况
这样就达成了简单的数据安全验证的要求, 梳理一下步骤:
- 原始数据产生时, 生成加密串并存放起来
- 当要使用/展现数据时, 再次计算数据的加密串, 并与存放的加密串进行比较
- 对比通过, 则证明数据安全, 否则数据有问题
实际使用中, 需要更严谨的步骤, 以及秘钥的保护, 加密串的保存等, 基本就是构建出一个简单又有效的数据安全校验方式
具体怎么用, 小伙伴们自行发挥
PS: 用这个再深入还可以延伸到区块链的概念
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/26095.html