您的位置:首页 > 编程语言 > Java开发

关于java散列算法(MD5 SHA-1 SHA-128 SHA-256..)的一点总结

2014-12-26 23:49 465 查看
java中提供了丰富的散列算法,在java.security包中,作用是什么就不多说了,今天简要介绍一下他们的用法1、单纯的使用算法进行计算
public String getMD5(byte[] bytes){String str=null;try {
			MessageDigest md=MessageDigest.getInstance("MD5");	//MD5 算法/*MessageDigest.getInstance("MD2");* MessageDigest.getInstance("SHA-256");* MessageDigest.getInstance("SHA-386");* MessageDigest.getInstance("SHA-512");****/md.update(bytes);byte[] b=md.digest();		//MD5 的计算结果是一个128 bit的长整数 	b.length = 16 byte=128 bit
			//上面两步骤可以合为一步	:byte[] b=digest(bytes);int i;StringBuffer buff=new StringBuffer();for(int offset=0;offset<b.length;offset++){i=b[offset];if(i<0)i+=256;if(i<16)buff.append("0");buff.append(Integer.toHexString(i));//转化为16进制表示}str=buff.toString();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}return str;//最终的计算结果}
2、有时候我们为了方便或从效率考虑,对于各种流,我们考虑用DigestInputStrea/DigestOutputStream
public class test {public static void main(String[] args) {File f=new File("E:/password.txt");try {FileInputStream in=new FileInputStream(f);MessageDigest digest=MessageDigest.getInstance("MD5");DigestInputStream din=new DigestInputStream(in, digest);din.on(true);//表示启用散列算法,如果不掉用on方法或者为false,则不能进行散列值得计算MD5 test=new MD5();<span style="white-space:pre">	</span>//用1的方法进行计算byte[] b=new byte[din.available()];din.read(b);String str=test.getMD5(b);System.out.println(str+" "+str.length());/*	for(int i=0;i<b.length;i++){System.out.println(b[i]);}*/digest=din.getMessageDigest();<span style="white-space:pre">	</span>//从流中得到散列实例,计算散列值,和1的方法进行比较,以验证结果的准确性byte[] b1=digest.digest();//int i;StringBuffer buff=new StringBuffer();for(int offset=0;offset<b1.length;offset++){i=b1[offset];if(i<0)i+=256;if(i<16)buff.append("0");buff.append(Integer.toHexString(i));}String str1=buff.toString();System.out.println(str1+" "+str1.length());} catch (NoSuchAlgorithmException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finaly{
<span style="white-space:pre">			</span>if(din!=null) din.close();}}
最终的输出结果:
2d762027a82b834ad48c00cb321de71f 322d762027a82b834ad48c00cb321de71f 32
表明结果是正确的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: