标签:时间 原理 大小 表示 64位 情况下 2nf 是什么 压缩
请问object的hash该怎么设计?
下面是解释最简单的一种hash算法
哈希算法又叫散列算法,是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。它的原理其实很简单,就是把一段交易信息转换成一个固定长度的字符串。
即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。
无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。
每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?
16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位。
于是你通常看到的哈希值,就是这样的了:
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。
易压缩:对于任意大小的输入x,Hash值的长度很小,在实际应用中,函数H产生的Hash值其长度是固定的。
易计算:对于任意给定的消息,计算其Hash值比较容易。
单向性:对于给定的Hash值,要找到使得在计算上是不可行的,即求Hash的逆很困难。在给定某个哈希函数H和哈希值H(M)的情况下,得出M在计算上是不可行的。即从哈希输出无法倒推输入的原始数值。这是哈希函数安全性的基础。
抗碰撞性:理想的Hash函数是无碰撞的,但在实际算法的设计中很难做到这一点。
有两种抗碰撞性:一种是弱抗碰撞性,即对于给定的消息,要发现另一个消息,满足在计算上是不可行的;另一种是强抗碰撞性,即对于任意一对不同的消息,使得在计算上也是不可行的。
高灵敏性:这是从比特位角度出发的,指的是1比特位的输入变化会造成1/2的比特位发生变化。消息M的任何改变都会导致哈希值H(M)发生改变。即如果输入有微小不同,哈希运算后的输出一定不同。
2不可逆加密阿呆:小星,你看这样可以不,我想一个A,经过下面的过程:
1.A+123=B
2.B^2=C
3.取C中第2~4位数,组成一个3位数D
4.D/12的结果求余数,得到E
小星:嗯,我想想,假如阿呆你想的A为5,那么:
5+123=128
128^2=16384
D=638 E=638mod12=53
(mod表示除法的求余数)
这种丢掉一部分信息的加密方式称为“单向加密”,也叫哈希算法
当两个不同的对象计算出相同的散列值时,我们称其为发生了 哈希碰撞 。当出现碰撞时,哈希表会从碰撞产生的位置开始向后寻找,把新的元素放在第一个可供放置的位置,随着哈希表变得越来越致密,发生碰撞的可能性也会随之增加,导致查找可用位置花费的时间也会增加(这也是为什么我们希望哈希函数的结果分布更接近于均匀分布)
http://www.sohu.com/a/232586831_100078137
哈希算法的实现方式很多,有兴趣的自己看吧
数据库三范式
第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
第二范式(2NF):满足1NF后,,没有包含在主键中的列必须完全依赖于主键,不能只依赖于主键的一部分。
第三范式(3NF):必须先满足第二范式(2NF),非主键列必须直接依赖于主键不能存在传递依赖。
标签:时间 原理 大小 表示 64位 情况下 2nf 是什么 压缩
原文地址:https://www.cnblogs.com/zhulina-917/p/10921283.html