关于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表明结果是正确的
相关文章推荐
- 常见加密算法java实现(MD5,SHA-256,SHA-512)
- 关于JAVA集合类的一点总结!
- 关于java内存的一点总结
- 关于JAVA中的static和final修饰符的一点总结
- java 实现各种加密(MD5 ,SHA-1,SHA-256)
- 关于java.io的一点总结
- [Java] 关于set()和get()方法的一点总结
- java 关于多态的一点总结
- java和struts使用中的一点总结--关于写在页面上的select域的选项选中后保存状态的办法!
- 关于Java中字符编码的一点总结
- java学习笔记1-关于throw和throws的一点总结
- JAVA计算摘要,例如MD5和SHA-256
- JAVA的MD5和SHA-256和SHA-512 的 Hash 算法的调用
- 关于java的环境变量的一点总结
- 关于JavaWeb拦截访问一点总结。
- 关于Java Primitive类型与内置Wrapper类型使用过程中的一点小总结
- 关于java的环境变量的一点总结
- 关于JavaWeb拦截访问一点总结。
- 关于java中的线程和线程池的一点总结
- 关于Java的二进制输入输出流的一点总结(有错误请指出)