广东网站建设教程,搜索引擎论文3000字,大部分网站是国内虚拟主机和国外虚拟主机,网站建设合同书模板hash的介绍
一#xff1a;hash的解释#xff1a;
哈希算法是一种能将不同长度的内容转化为固定长度的输出的算法#xff0c;也称摘要算法或者散列算法。
二#xff1a;hash的特点#xff1a;
1、不同的内容转化的长度固定
2、相同的内容转化的结果一定相同
3、不同的…·hash的介绍
一hash的解释
哈希算法是一种能将不同长度的内容转化为固定长度的输出的算法也称摘要算法或者散列算法。
二hash的特点
1、不同的内容转化的长度固定
2、相同的内容转化的结果一定相同
3、不同的内容转化的结果基本不同
4、无法逆推导除原文
·hash冲突
由于可以进行hash加密的内容是无穷的但是生成的hash数长度是固定的所以可能出现不同的内容生成的哈希结果相同这个现象称之为哈希冲突。
所以输出的结果越长碰撞越不容易发生也就越安全。
·常见的hash算法
常见hash算法有 MD5, SHA1, SHA224, SHA256, SHA384, SHA512。
下面举两个例子说明这些算法的使用方法。
一MD5
import java.security.MessageDigest;public class main {public static void main(String[] args) {MessageDigest md MessageDigest.getInstance(MD5);md.update(Hello.getBytes(UTF-8));md.update(World.getBytes(UTF-8));byte[] results md.digest(); StringBuilder sb new StringBuilder();for(byte bite : results) {sb.append(String.format(%02x, bite));}System.out.println(sb.toString());}
}
二SHA-1
这里只需要把MD5改成SHA-1即可。
import java.security.MessageDigest;public class main {public static void main(String[] args) {MessageDigest md MessageDigest.getInstance(SHA-1);md.update(Hello.getBytes(UTF-8));md.update(World.getBytes(UTF-8));byte[] results md.digest(); StringBuilder sb new StringBuilder();for(byte bite : results) {sb.append(String.format(%02x, bite));}System.out.println(sb.toString());}
}
·hash的作用
hash算法根据它的特点相同的内容加密后的结果一定相同可以用来进行检验。
有两个用途
1、对下载软件的完整性进行检验
因为现在的盗版软件或者有毒软件很多可以通过这种方式检查自己下载的软件是否是被修改过。
2、对账户密码进行检验
将密码存入时进行加密防止被黑客盗取然后在用户登录时将输入的密码进行加密将加密的结果和数据库中存储的结果进行比较就知道密码是否正确了。
彩虹表
但是根据相同的内容加密后的结果一定相同的特性也会衍生出一些问题。
由于大多数用户的密码相对简单所以黑客可以根据一些常用密码比如123456等穷举出他们对应的哈希加密结果制作成表这个表就是彩虹表。然后根据彩虹表进行对比可以反推出简单常用的密码。
而应对的方式则是给每个密码添加随机数称之为加盐