散列值过大怎么办?什么是散列值?

2020-04-19 10:51:03 java常见问答 6336

对java软件开发有所接触的朋友们,对其包含的一系列函数想必是不陌生的,下面小编要带大家了解的一种函数名叫散列函数。那其实散列值,散列算法都是指它,所以你了解什么是散列值吗?如果散列值过大了怎么办呢?

其实点简单来说,hash就是散列值。概念如下:

输入一个长度不固定的字符串,返回一串定长度的字符串,又称HASH值。 (这个长度可以是几b到几Gb不等) (8位、16位、32位……)比如说现在比较常用的一种hash算法就是MD5算法了,DVBBS 、6KBBS、LeadBBS等都是用它对密码进行加密的,如果说你要做病毒检测的话,那就举个更贴切的例子吧:你去网上下个linux软件一看,被发现大部分下载地址旁边都有个MD5值,这就是一个很典型的hash值。也就是像前面所说,一个文件在它没被病毒感染、修改的时候,通过同一种 hash 算法在不同的地方就能够得到相同的一个值,但是如果说这个文件被改变了一点,就哪怕是1bit,都会让整个文件的hash值改变。通过观察hash值你就可以知道文件被修改过了没有,如果被改过了,那么这个文件可能就不安全了!再举个更实际的例子:假设你是一个网站的站长,你有一个很有必要的文件要给大家分享,你把它放在了你的网站上,但你不放心——万一你的网站被黑客入侵,并用一个病毒文件伪装成那个文件的话,那么下载你软件的人就会要被病毒感染了!那么怎么样才能更安全的给别人下载呢? 你只要把原来的文件,用某种hash算法来得到它相对应的hash值,并把算法跟 hash值告诉要下载的人,下载的人把软件下载回来以后就按照你的算法,来计算他下载到的那个文件。如果他算出来的结果跟你给他的那个hash值一样,那么这个文件就没有什么问题了。如果不等,那这个文件就有问题了。只是解释了一下什么是hash,单向的hash 就是说根据字符串能求出散列值,但根据散列值,除了穷举以外没有办法能求出字符串的,就是传说中的单向 hash 了。

Hash呢,一般被翻译做“散列”,也有直接音译为”哈希“的,就是把任意长度的输入,通过散列算法,转变成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入的空间的,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说,就是一种将任意长度的消息给压缩到某一固定长度的消息摘要的函数。Hash主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做Hash值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。

那么以上就是有关散列值的所有内容了,如果说是对java一些知识问答还有兴趣的话,可以继续关注本站消息。