标签:system salt integer com 数字 return 相同 void img
摘要算法(哈希算法/Hash/数字指纹):
摘要算法目的:
输入:任意长度数据(byte[])
输出:固定长度数据(byte[n])
hash("hello") = 0x5e918d2
hash("hello,java") = 0x7a9d88e8
hash("hello,bob") = 0xa0dbae2f
java的Object.hashCode()方法就是一个摘要算法:
输入:任意数据
输出:固定长度数据(int, byte[4])
相同的输入得到相同的输出:equals/hashCode
碰撞:
两个不同的输入得到了相同的输出,仅做示例
hash("abc") = 0x12345678
hash("xyz") = 0x12345678
哈希算法是将一个无限的输入集合映射到一个有限的输入集合。碰撞是不能避免的,因为输出的字节长度是固定的,而输入的字节长度是不固定的。所以哈希算法是把一个无限的输入集合映射到一个有限的输出集合。
假设输出2个字节的摘要,1个字节8位,2个字节16位,即所有的输出在16个0到16个1之间,即2^16=65536。将无限的输入映射到输出集合中,肯定有不同的输入获得相同输出的情况,即碰撞。
Hash算法的安全性:
算法 | 输出长度:位数 | 输出长度:字节数 |
---|---|---|
MD5 | 128 bits | 16bytes |
SHA-1 | 160bits | 20bytes |
SHA-256 | 256bits | 32bytes |
PipeMd-160 | 160bits | 20bytes |
import java.math.BigInteger;
import java.security.MessageDigest;
public class SplitString {
public static byte[] toMD5(byte[] input){
MessageDigest md;
try{
md = MessageDigest.getInstance("MD5");
}catch (Exception e){
throw new RuntimeException(e);
}
md.update(input);
return md.digest();//返回MD5
}
public static void main(String[] args) throws Exception {
String s = "MD5摘要算法测试";
byte[] r = toMD5(s.getBytes("UTF-8"));//先将字符串转化为字节数组
System.out.println(String.format("%032x",new BigInteger(1,r)));
System.out.println(String.format("%040x",new BigInteger(1,r)));//不足40位,前面补0
System.out.println(String.format("%40x0",new BigInteger(1,r)));//后面加0
}
}
import java.math.BigInteger;
import java.security.MessageDigest;
public class SplitString {
public static byte[] toMD5(byte[] input){
MessageDigest md;
try{
md = MessageDigest.getInstance("MD5");
}catch (Exception e){
throw new RuntimeException(e);
}
md.update(input);
return md.digest();//返回MD5
}
public static void main(String[] args) throws Exception {
String s = "helloworld";
String salt = "Random salt";
byte[] r = toMD5((salt+s).getBytes("UTF-8"));//先将字符串转化为字节数组
System.out.println(String.format("%032x",new BigInteger(1,r)));
System.out.println(String.format("%040x",new BigInteger(1,r)));
System.out.println(String.format("%40x0",new BigInteger(1,r)));
}
}
总结:
标签:system salt integer com 数字 return 相同 void img
原文地址:https://www.cnblogs.com/csj2018/p/10828688.html