Hash算法性质

Hash算法用于计算消息摘要(Message Digest),可以将任意长的输入信息快速地转换为固定长度的输出。在区块链中主要利用了Hash算法的三种性质:

  • 抗冲突性(Collision Resistance):不同的输入经过Hash运算之后很难产生相同的输出,哪怕输入之间只有微小的差别也会对输出造成很大的影响(雪崩效应)。
  • 信息隐藏(Hiding):是指很难通过输出的内容联想到输入的内容。
  • 谜题友好(Puzzle Friendly):知道了输出想反向计算出原始的输入内容几乎是不可能做到的,需要耗费巨量的计算。

应用场景举例

  • 文件校验

    p2p软件在下载完成之后,为了防止下载的文件被篡改或者损坏,会对文件用MD5哈希算法进行校验,计算结果和预先得知的哈希值一致才认为下载成功。
  • 数字签名

    将要传递的信息经过Hash运算之后生成消息摘要(Message Digest),再用自己的私钥对消息摘要进行加密作为附带的签名一起传输给对方。这样一来能实现1.防止信息被截获篡改;2.证明信息确实是来自于哪个人。

常见Hash算法种类

  • MD5

    MD5(Message Digest 5)是一种被广泛使用的Hash函数,可以生成128位(16字节)的Hash值,用于确保信息传输完整性。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。MD5比MD4更加安全,但过程更加复杂,计算速度要慢一点。MD5已于2004年被成功碰撞,其安全性已不足应用于商业场景。
  • SHA1

    SHA(Secure Hash Algorithm)家族中第一代哈希算法,SHA1在许多安全协议中广为使用,包括TLS和SSL。2017年2月,Google宣布已攻破了SHA1,并准备在其Chrome浏览器产品中逐渐降低SHA1证书的安全指数,逐步停止对使用SHA1哈希算法证书的支持。
  • SHA2

    SHA(Secure Hash Algorithm)家族中第二代哈希算法,这是SHA算法家族的第二代,支持了更长的摘要信息输出,主要有SHA224、SHA256、SHA384和SHA512,数字后缀表示它们生成的哈希摘要结果长度。
  • SHA3

    SHA(Secure Hash Algorithm)家族中第三代哈希算法,之前名为Keccak256算法(读作“ketchak”,被采纳为标准之后改叫SHA3,但在最终SHA3标准改了keccak256中的填充算法,所以两者实际计算的结果是不同的),SHA3并不是要取代SHA2,因为目前SHA2并没有出现明显的弱点,由于对MD5、SHA0和SHA1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密Hash算法,也就是现在的SHA3。
  • RIPEMD-160

    RIPEMD-160(RACE Integrity Primitives Evaluation Message Digest-160)是一个160位加密哈希函数。它旨在替代128位哈希函数MD4、MD5和RIPEMD-128。
  • SM3

    SM3(Shang Mi 3)是国家密码局指定的国密版本的哈希算法,此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的哈希值。

Hash算法简介的更多相关文章

  1. 一致性hash算法简介与代码实现

    一.简介: 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance) 2.单调性(Monotonicity) 3.分散性(Spread) 4.负 ...

  2. 一致性hash算法简介

    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...

  3. 分布式缓存技术memcached学习(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到“分布式一致性hash算法”这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前,我们先来了解一下这几 ...

  4. 分布式缓存技术memcached学习系列(四)—— 一致性hash算法原理

    分布式一致性hash算法简介 当你看到"分布式一致性hash算法"这个词时,第一时间可能会问,什么是分布式,什么是一致性,hash又是什么.在分析分布式一致性hash算法原理之前, ...

  5. 【整理】hash算法原理及常见函数

    简介 Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值.        散列表 ...

  6. 【数据结构与算法】一致性Hash算法及Java实践

    追求极致才能突破极限 一.案例背景 1.1 系统简介 首先看一下系统架构,方便解释: 页面给用户展示的功能就是,可以查看任何一台机器的某些属性(以下简称系统信息). 消息流程是,页面发起请求查看指定机 ...

  7. hash算法与hashmap

    参考博客: http://zha-zi.iteye.com/blog/1124484 http://www.cnblogs.com/dolphin0520/p/3681042.html(参考了hash ...

  8. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  9. FNV hash算法

    原文:https://blog.csdn.net/u013137970/article/details/79020095 FNV算法简介FNV算法属于非密码学哈希函数,它最初由Glenn Fowler ...

随机推荐

  1. 原生JDK网络编程- Buffer

    Buffer用于和NIO通道进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中的.以写为例,应用程序都是将数据写入缓冲,再通过通道把缓冲的数据发送出去,读也是一样,数据总是先从通道读到缓冲,应用程 ...

  2. 编写高效优雅Java程序

    面向对象 01.构造器参数太多怎么办? 如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂. 用JavaBeans模式, get和set 一行构造编程多行代码实现,需要使用额外机制确 ...

  3. latex tips

    latex tips  latex 插入图片 主要是插入图片位置的问题,代码中的  bb=   决定了插入 fig2.eps 图片的某一方形区域,其中     表示该方形区域的左下角像素坐标是 0 0 ...

  4. Java中AQS基本实现原理

    一.AQS概述 AQS全名AbstractQueuedSynchronizer,意为抽象队列同步器,JUC(java.util.concurrent包)下面的Lock和其他一些并发工具类都是基于它来实 ...

  5. python 手把手教你基于搜索引擎实现文章查重

    前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦.近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制.黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联系方式从而使读者获 ...

  6. Redis统计访问量方法

    1.统计客户忘问量 2.查询某位ID客户是否登录 一亿用户,统计数据10M左右,比较省空间 set usercount 0 设置一个变量,用于记录客户访问量setbit usercount 2 0   ...

  7. C语言知识汇编

    (20-) 1.局部变量:定义在大括号的变量是局部变量 作用域:从 定义变量到return或者遇到 } 结束为止 include <stdio.h> int main() { int nu ...

  8. mariadb 2

    mariadb第二章-增删改   MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 ...

  9. 条件编译(debug)

    1. #ifdef 标识符 代码段1 #else 代码段2(可以为空) #endif (条件编译结束语句,和#ifdef配套使用) 如果标识符被#define过,则编译代码段1,否则编译代码段2 2. ...

  10. Redis学习(五)Redis知识点总结

    一.基础概念 Q:什么是 Redis? 定义:Redis 是完全开源免费基于内存亦可持久化的,遵守 BSD 协议,是一个高性能的 key-value 数据库. 特点: 数据的持久化 :可以将内存中的数 ...