浅谈Hash函数
什么是hash函数:
hash函数也可以翻译成“散列”函数,一般就使用音译“哈希”函数,简单的说哈希函数是对任意长度的输入进行的压缩映射,所谓的压缩映射顾名思义,输出通常来说要比输入短,并且得到的输出也是固定长度的,单向不可逆的(也就是说知道输出想要得到输入理论上是不能实现的),哈希函数在数字签名和消息完整性的检测等方面有着广泛的应用。
简单的总结一下,散列值的生成过程是这样的:
h=H(M)
其中,M是消息(输入),H是hash函数,h是得到的散列值(输出),上面的式子有以下的几个特点:
1.M是任意长度的,H应用于任意长度的消息M
2.H处理以后得到的输出是固定长度的(根据具体的算法决定)
3.单向性:对于任意长度的M,计算h是容易的,但是知道h,计算M是困难的,理论上不可实现
4.抗弱碰撞性:对于给定的消息x,找到满足条件的y(y不等于x)使得H(x)= H(y),计算上是不可行的
5.抗强碰撞性:找到任意的x,y满足 H(x)= H(y),在计算上也是不可行的
也就是说任意两个消息只要存在略微的差别,他们的哈希值也是相差甚远的,可以说hash函数具有雪崩效应。
浅谈Hash函数的更多相关文章
- 浅谈javascript函数节流
浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...
- 开发技术--浅谈Python函数
开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...
- [转载]浅谈JavaScript函数重载
原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...
- 浅谈箭头函数和setTimeout中的this
箭头函数会改变this的指向,这个大家看文档都看到过,可是有没有具体理解呢?我发现自己应该可能大概是......emmmm,然后我整理了一遍,加强一下概念吧顺带再讲一下setTimeout这个函数改写 ...
- [转]浅谈javascript函数劫持
转自:Ph4nt0m Security Team 这么多年了,现在学习依然还是有很多收货,向前辈致敬.转载一方面是自己存档一份,另一方面是让更多喜欢安全的人一同学习. ================ ...
- 浅谈Hash在多个字符串匹配类型问题中的应用
在生活中们有时会遇到一些有关字符串匹配的问题. 这时打暴力往往显得很愚蠢,效率低下. 所以就需要一些算法和数据结构来提高效率. Hash Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把 ...
- 浅谈hash
hash 算法介绍 hash说得通俗一点,就是给一个变量编上一个马甲 比如说一个人聪明可爱,举世无双,天资聪慧.活泼机灵...,那么就是叫我了(真不要脸 但是这样是不是显得些许麻烦? 于是人类发明了名 ...
- 浅谈setTimeout函数和setInterval函数
前几天学了js,看到了两个非常有趣的函数,他们分别是setTimeout函数和setInterval函数,这两个函数能使网页呈现非常一些网页中比较常见的效果,比如说图片轮播,等一些非常好玩的效果.下面 ...
- 【python】浅谈enumerate 函数
enumerate 函数用于遍历序列中的元素以及它们的坐标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a 1 b ...
随机推荐
- 抽象工厂模式firstones
与工厂方法模式的区别是工厂子类中会创建出同一类型的不同产品对象.工厂方法模式则工厂子类中只是创建一种具体的产品对象 结构: 产品基类:子类继承的虚函数方法 具体产品子类:实现该产品功能 工厂基类:工厂 ...
- VS2010中经常使用的快捷键
1. 格式化对齐:Ctrl+K+F 2. 智能感知:Ctrl+J: 3. 智能感知显示參数信息:Ctrl+Shift+空格: 4. 检查括号匹配(在左右括号间切换): Ctrl +] 5. 选中从光标 ...
- 初学springMVC搭建框架过程及碰到的问题
刚刚开始学spring框架,因为接了一个网站的项目,想用spring+springMVC+hibernate整合来实现它,现在写下搭建框架的过程及碰到的问题.希望给自己看到也能让大家看到不要踏坑. 一 ...
- Nodejs随笔(一):Hello World!
声明:本人用的是Ubuntu 14.04 LTS 系统. 一.Nodejs安装: <1>直接apt-get安装,最简单:sudo apt-get install nodejs <2& ...
- NSThread 的用法
一.线程的注意点: 1.不要同时开太多的线程(最多不要超过5条,其中包括主线程) 2.线程概念 2.1.主线程:UI 线程,显示.刷新 UI 界面,处理 UI 控件的事件 2.2.子线程:后台线程,异 ...
- OpenCV学习(3)--Mat矩阵的操作
CvMat的矩阵结构 typedef struct CvMat { //矩阵中元素的类型 int type; //行数据长度 int step; /* for internal use only */ ...
- QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData
SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...
- JS的匿名函数和递归应用
今天有项目需要用到JS的递归,开始按照php的实现方法,发现不行,后来只能使用arguments.callee. 简单的例子,如下 var act = 'if(num <= 1){return ...
- GDB调试方法(转)
一:列文件清单 1. List (gdb) list line1,line2 ************************************************************* ...
- Scala数组操作实战详解
增删改查,要注意的是,Array数组是定长数组,ArrayBuffer数组才是变长数组. 其他集合也存在可变不可变.例如,List,Set,Map 多维数组定义方法与Java类似.