哈希(hash)算法可以防止数据被篡改的原理是什么

bandaoyu 2019-07-22 07:09:28
问题见图片:
...全文
1058 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2020-10-12
  • 打赏
  • 举报
回复
2020回头再看,总结一下: 其实 hash加密无法防止 “数据和hash值一起被篡改的情况”的情况。“数据和hash值一起被篡改的情况”是有可能发生的,这种叫做中间人攻击。所以在安全性要求更高的地方,用到 数字签名技术。 防止 中间人攻击,就是要 识别对方是不是你要对话的对象(而不是中间的黑客),所以就有一个数字签名技术认证技术,你可以了解SSL:https://blog.csdn.net/bandaoyu/article/details/106554600,(TSL是SSL的升级)
bandaoyu 2019-08-01
  • 打赏
  • 举报
回复
引用 12 楼 赵4老师 的回复:
我要不偷偷告诉你,黑客咋猜出我的hash算法加的盐是password呢? 字典攻击?
哦~~ 所以还是一定要保密好算法信息,不能让其他人知道
赵4老师 2019-08-01
  • 打赏
  • 举报
回复
我要不偷偷告诉你,黑客咋猜出我的hash算法加的盐是password呢? 字典攻击?
bandaoyu 2019-08-01
  • 打赏
  • 举报
回复
引用 9 楼 赵4老师 的回复:
比如txt文件内容为: data=1 hash=bf068ad93313b4688371dc3e32b1c854 你把 data=1 改成 data=2 文件内容变成 data=2 hash=bf068ad93313b4688371dc3e32b1c854 我用只有我知道的hash算法计算data=2对应的 hash=031edfa805e27814bfb8470f16b2a3d5 和从txt文件中读出的hash不一样,就知道data被篡改了。 偷偷告诉你,我的hash算法是MD5("data=1password")
老大,不来教小弟了吗
赵4老师 2019-07-23
  • 打赏
  • 举报
回复
比如txt文件内容为: data=1 hash=bf068ad93313b4688371dc3e32b1c854 你把 data=1 改成 data=2 文件内容变成 data=2 hash=bf068ad93313b4688371dc3e32b1c854 我用只有我知道的hash算法计算data=2对应的 hash=031edfa805e27814bfb8470f16b2a3d5 和从txt文件中读出的hash不一样,就知道data被篡改了。 偷偷告诉你,我的hash算法是MD5("data=1password")
bandaoyu 2019-07-23
  • 打赏
  • 举报
回复
引用 6 楼 636f6c696e 的回复:
当然有这种可能,数字签名就是防范这个而来的,确保发送的报文是原本发送者发的
[quote=引用 4 楼 bandaoyu 的回复:]
[quote=引用 1 楼 636f6c696e 的回复:]哈希函数的特性,只要原数据有一丁点的修改,那么算出来的哈希值必然会大不相同。
CRC也是类似的道理,但是CRC的安全性如抗碰撞性远没有哈希来得高。
第二个问题你实际说的是中间人攻击,哈希算法本身无法防止中间人攻击,而且实际过程中数据和哈希值的位置攻击者并不知道
嗯,回答的很好,攻击者不知道数据和哈希值的位置就攻击不了,那会不会协议泄露了,被知道位置了而收到攻击呢[/quote][/quote]嗦嘎,我看到说加密是利用hash的不可逆性,那这个例子当中,有用到这个特性吗
bandaoyu 2019-07-23
  • 打赏
  • 举报
回复
引用 3 楼 sdghchj 的回复:
那得看具体什么应用场景。 哈希算法有很多种,截获数据后你还得知道是什么哈希算法不是? 在加密要求很高的通信过程中,参考TLS协议,还会在hash基础上再加一层RSA非对称加密。
嗯,你说的加密这个,我还没学到,我现在想先了解是如何防篡改的
636f6c696e 2019-07-23
  • 打赏
  • 举报
回复
当然有这种可能,数字签名就是防范这个而来的,确保发送的报文是原本发送者发的
引用 4 楼 bandaoyu 的回复:
[quote=引用 1 楼 636f6c696e 的回复:]哈希函数的特性,只要原数据有一丁点的修改,那么算出来的哈希值必然会大不相同。
CRC也是类似的道理,但是CRC的安全性如抗碰撞性远没有哈希来得高。
第二个问题你实际说的是中间人攻击,哈希算法本身无法防止中间人攻击,而且实际过程中数据和哈希值的位置攻击者并不知道
嗯,回答的很好,攻击者不知道数据和哈希值的位置就攻击不了,那会不会协议泄露了,被知道位置了而收到攻击呢[/quote]
636f6c696e 2019-07-23
  • 打赏
  • 举报
回复
当然有这种可能,数字签名就是防范这个而来的,确保发送的报文是原本发送者发的
引用 4 楼 bandaoyu 的回复:
[quote=引用 1 楼 636f6c696e 的回复:]哈希函数的特性,只要原数据有一丁点的修改,那么算出来的哈希值必然会大不相同。
CRC也是类似的道理,但是CRC的安全性如抗碰撞性远没有哈希来得高。
第二个问题你实际说的是中间人攻击,哈希算法本身无法防止中间人攻击,而且实际过程中数据和哈希值的位置攻击者并不知道
嗯,回答的很好,攻击者不知道数据和哈希值的位置就攻击不了,那会不会协议泄露了,被知道位置了而收到攻击呢[/quote]
bandaoyu 2019-07-23
  • 打赏
  • 举报
回复
引用 1 楼 636f6c696e 的回复:
哈希函数的特性,只要原数据有一丁点的修改,那么算出来的哈希值必然会大不相同。 CRC也是类似的道理,但是CRC的安全性如抗碰撞性远没有哈希来得高。 第二个问题你实际说的是中间人攻击,哈希算法本身无法防止中间人攻击,而且实际过程中数据和哈希值的位置攻击者并不知道
嗯,回答的很好,攻击者不知道数据和哈希值的位置就攻击不了,那会不会协议泄露了,被知道位置了而收到攻击呢
sdghchj 2019-07-23
  • 打赏
  • 举报
回复
那得看具体什么应用场景。 哈希算法有很多种,截获数据后你还得知道是什么哈希算法不是? 在加密要求很高的通信过程中,参考TLS协议,还会在hash基础上再加一层RSA非对称加密。
bandaoyu 2019-07-23
  • 打赏
  • 举报
回复
我的意思说,黑客吧把data=1改成data=2,同时重新计算hash,然后把hash也改了,那接收方不就发现不了被篡改了吗?你的意思是说,要保密hash算法,不让别人知道才可以对吗?
smwhotjay 2019-07-22
  • 打赏
  • 举报
回复
签名技术
636f6c696e 2019-07-22
  • 打赏
  • 举报
回复
哈希函数的特性,只要原数据有一丁点的修改,那么算出来的哈希值必然会大不相同。 CRC也是类似的道理,但是CRC的安全性如抗碰撞性远没有哈希来得高。 第二个问题你实际说的是中间人攻击,哈希算法本身无法防止中间人攻击,而且实际过程中数据和哈希值的位置攻击者并不知道
 本次课程会带着大家学习Hash算法,从源码的角度去学习算法,更加容易理解的方式去学习,能够更高效的吸收学到的内容,也能培养出能够独自看源码,分析源码的能力。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。  哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。  简单解释:哈希Hash算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧