本文转自:http://www.cnblogs.com/solove/archive/2011/10/18/2216715.html

上部分是转载的关于字符串的加密,后半部分则比较全,包括字符串、文件、字节数组、等

  1. package util;
  2. import java.security.MessageDigest;
  3. public class Encript {
  4. //十六进制下数字到字符的映射数组
  5. private final static String[] hexDigits = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
  6. /**把inputString加密*/
  7. public static String md5(String inputStr){
  8. return encodeByMD5(inputStr);
  9. }
  10. /**
  11. * 验证输入的密码是否正确
  12. * @param password 真正的密码(加密后的真密码)
  13. * @param inputString 输入的字符串
  14. * @return 验证结果,boolean类型
  15. */
  16. public static boolean authenticatePassword(String password,String inputString){
  17. if(password.equals(encodeByMD5(inputString))){
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }
  23. /**对字符串进行MD5编码*/
  24. private static String encodeByMD5(String originString){
  25. if (originString!=null) {
  26. try {
  27. //创建具有指定算法名称的信息摘要
  28. MessageDigest md5 = MessageDigest.getInstance("MD5");
  29. //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
  30. byte[] results = md5.digest(originString.getBytes());
  31. //将得到的字节数组变成字符串返回
  32. String result = byteArrayToHexString(results);
  33. return result;
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. return null;
  39. }
  40. /**
  41. * 轮换字节数组为十六进制字符串
  42. * @param b 字节数组
  43. * @return 十六进制字符串
  44. */
  45. private static String byteArrayToHexString(byte[] b){
  46. StringBuffer resultSb = new StringBuffer();
  47. for(int i=0;i<b.length;i++){
  48. resultSb.append(byteToHexString(b[i]));
  49. }
  50. return resultSb.toString();
  51. }
  52. //将一个字节转化成十六进制形式的字符串
  53. private static String byteToHexString(byte b){
  54. int n = b;
  55. if(n<0)
  56. n=256+n;
  57. int d1 = n/16;
  58. int d2 = n%16;
  59. return hexDigits[d1] + hexDigits[d2];
  60. }
  61. }
  62. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  63. package com.angsentech.ssm.util;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;

    /**
    * MD5加密处理工具类
    * @author Administrator
    *
    */

    public class MD5Utils {
    /**
    * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
    */
    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
    '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    protected static MessageDigest messagedigest = null;
    static {
    try {
    messagedigest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException nsaex) {
    System.err.println(MD5Utils.class.getName()
    + "初始化失败,MessageDigest不支持MD5Util。");
    nsaex.printStackTrace();
    }
    }

    /**
    * 生成字符串的md5校验值
    *
    * @param s
    * @return
    */
    public static String getMD5String(String s) {
    return getMD5String(s.getBytes());
    }

    /**
    * 判断字符串的md5校验码是否与一个已知的md5码相匹配
    *
    * @param password
    * 要校验的字符串
    * @param md5PwdStr
    * 已知的md5校验码
    * @return
    */
    public static boolean isEqualsToMd5(String password, String md5PwdStr) {
    String s = getMD5String(password);
    return s.equals(md5PwdStr);
    }

    /**
    * 生成文件的md5校验值
    *
    * @param file
    * @return
    * @throws IOException
    */
    public static String getFileMD5String(File file) throws IOException {
    InputStream fis;
    fis = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int numRead = 0;
    while ((numRead = fis.read(buffer)) > 0) {
    messagedigest.update(buffer, 0, numRead);
    }
    fis.close();
    return bufferToHex(messagedigest.digest());
    }

    /**
    * 生成字节数组的md5校验值
    *
    * @param s
    * @return
    */
    public static String getMD5String(byte[] bytes) {
    messagedigest.update(bytes);
    return bufferToHex(messagedigest.digest());
    }

    private static String bufferToHex(byte bytes[]) {
    return bufferToHex(bytes, 0, bytes.length);
    }

    private static String bufferToHex(byte bytes[], int m, int n) {
    StringBuffer stringbuffer = new StringBuffer(2 * n);
    int k = m + n;
    for (int l = m; l < k; l++) {
    appendHexPair(bytes[l], stringbuffer);
    }
    return stringbuffer.toString();
    }

    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
    char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>>
    // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
    char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
    stringbuffer.append(c0);
    stringbuffer.append(c1);
    }

    /**
    * 将源字符串使用MD5加密为字节数组
    * @param source
    * @return
    */
    public static byte[] encode2bytes(String source) {
    byte[] result = null;
    try {
    MessageDigest md = MessageDigest.getInstance("MD5");
    md.reset();
    md.update(source.getBytes("UTF-8"));
    result = md.digest();
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    return result;
    }

    /**
    * 将源字符串使用MD5加密为32位16进制数
    * @param source
    * @return
    */
    public static String encode2hex(String source) {
    byte[] data = encode2bytes(source);
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
    String hex = Integer.toHexString(0xff & data[i]);

    if (hex.length() == 1) {
    hexString.append('0');
    }

    hexString.append(hex);
    }

    return hexString.toString();
    }

    /**
    * 验证字符串是否匹配
    * @param unknown 待验证的字符串
    * @param okHex 使用MD5加密过的16进制字符串
    * @return 匹配返回true,不匹配返回false
    */
    public static boolean validate(String unknown , String okHex) {
    return okHex.equals(encode2hex(unknown));
    }
    }

关于java中MD5加密(可直接使用)的更多相关文章

  1. java中MD5加密的小使用

    最近项目中需要用到md5加密,就自己在网上看了看. package com.wxgs.ch01; import java.security.MessageDigest; import java.sec ...

  2. java中md5加密方法

    package com.func; import java.io.UnsupportedEncodingException;import java.math.BigInteger;import jav ...

  3. java中MD5加密

    MD5加密是一种不可逆(一些网站通过庞大的数据库可以解密一些简单的)的加密算法(其实是信息摘要算法),常用于用户密码,文件上传等 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长 ...

  4. JAVA中MD5加密实现

    MD5加密实现  结 package com.pb; import java.io.UnsupportedEncodingException; import java.security.Message ...

  5. 使用JAVA进行MD5加密后所遇到的一些问题

    前言:这几天在研究apache shiro如何使用,这好用到了给密码加密的地方,就碰巧研究了下java的MD5加密是如何实现的,下面记录下我遇到的一些小问题. 使用java进行MD5加密非常的简单,代 ...

  6. Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下   (1)一般使用的数据库中都会保存用 ...

  7. Java实现MD5加密_字符串加密_文件加密

    Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ...

  8. Java实现MD5加密及解密的代码实例分享

    链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...

  9. Java C# MD5 加密串一致性

    Java C# MD5 加密串一致性   Java public final static String md5(String s) { char hexDigits[] = { '0', '1',  ...

随机推荐

  1. Python元组详解

    元组的特征 元组类型的名字是tuple 元组的一级元素不可被修改.不能增加或者删除: 元组和列表的书写区别是将中括号改成了小括号: 为方便区分元组和普通方法的参数,一般在元组的最后一个元素后保持加一个 ...

  2. 小程序图片上传,长按删除,weui

    <view class="weui-cells"> <view class="weui-cell"> <view class=&q ...

  3. Java面向对象--类和对象

    面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...

  4. 关于“教室派”APP的使用报告和相关建议

    教室派APP能够很好的解决学生查询各教室占用情况这一问题,使用起来非常方便.用户可根据需要选取星期来查询不同教学楼教室使用情况. 编辑课表是其附带功能,但通过使用发现手动编辑课表效率太低,建议开发者加 ...

  5. 简写函数字面量(function literal)

    如果函数的参数在函数体内只出现一次,则可以使用下划线代替: val f1 = (_: Int) + (_: Int) //等价于 val f2 = (x: Int, y: Int) => x + ...

  6. C# ODP.Net oracle数据库操作 支持不安装客户端

    下载: http://download.oracle.com/otn/other/ole-oo4o/ODTwithODAC1110720.zip?AuthParam=1414811820_e61f2f ...

  7. Allegro 串扰仿真

    利用于博士的那个电路板,看一下cadence软件的串扰仿真,我们选取3跟信号线,见下图. U6.N3-R36-U7.56 U6.P3-R36-U7.54 U6.P2-R36-U7.53 下面启动sig ...

  8. 【Redis运行状态下切换RDB备份至AOF备份】

    "redis持久化方式有哪些?又有何区别? rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能. aof:以追加的方式记录redis操作日志的文件,可最大程 ...

  9. Jquery插件 之 zTree树加载

    原文链接:https://blog.csdn.net/jiaqu2177/article/details/80626730 zTree树加载 zTree 是一个依靠 jQuery 实现的多功能 “树插 ...

  10. js面向对象的程序设计 --- 下篇 继承启蒙

    继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...