本文转自: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. Treats for the Cows POJ - 3186 dp 区间dp

    //dp[i][j]表示第i次从左边取,第j次从右边取的价值,所以我们可以得到状态方程 //dp[i][j]=max(dp[i-1][j]+(i+j)*a[i],dp[i][j-1]+(i+j)*a[ ...

  2. [ZJOI2009] 狼与羊的故事 - 最小割

    给定一个\(N \times M\)方格矩阵,每个格子可在\(0,1,2\)中取值.要求在方格的边上进行划分,使得任意联通块内不同时包含\(1\)和\(2\)的格子. ________________ ...

  3. [SDOI2012] Longge的问题 - 欧拉函数

    求 \(\sum\limits_{i=1}^{n}gcd(i,n)\) Solution 化简为 \(\sum\limits_{i|n}^{n}φ(\dfrac{n}{i})i\) 筛出欧拉函数暴力求 ...

  4. DVR

    DVR,全称为Digital Video Recorder(硬盘录像机),即数字视频录像机,相对于传统的模拟视频录像机,采用硬盘录像,故常常被称为硬盘录像机.它是一套进行图像计算存储处理的计算机系统, ...

  5. 在vue中使用elementUI饿了么框架使用el-tabs,切换Tab如何实现实时加载,以及el-table表格使用总结

    当我们在开发中遇到tab切换,这时候用el的el-tabs感觉很方便 但当我在把代码都写完后,发现一个问题就是页面打开时 虽然我们只能看见当前一个tab页,但是vue会帮你把你写的所有tab页的内容都 ...

  6. 给IDEA添加右键打开功能

    添加文件夹右键程序打开 开始运行regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 1.右键shell目录新建项Idea 2. ...

  7. 题解 P5733 【【深基6.例1】自动修正】

    题目传送门 分析: 1.这道题可以说是一个字符串的练习好题.我们先来了解一下字符串.在这道题中,建议使用\(string\) \(string\)是\(C++\).\(java\).\(VB\)等编程 ...

  8. C++中多态实现的关键——虚函数

    1.多态的作用 在面向对象程序设计中,使用多态能够增强代码的可扩充性,,即程序需要增加或修改部分功能时,只需修改少量代码就能够达到目的,此外多态也能起到精简代码的作用. 而实现多态的关键点,就是虚函数 ...

  9. COS上传图片和显示图片

    写这篇文章之前,我也是刚刚实现COS上传和显示图片.我百度了好多相关文章,COS上传图片成功的文章不少,上传后显示图片的文章几乎没有.于是写一篇记录下. COS上传图片推荐链接:https://blo ...

  10. JDBC——Connection数据库连接对象

    功能 1.获取执行SQL的对象 方法:createStatement() 用于创建向数据库发送SQL语句的一个对象.修饰/返回值类型:Statement(声明) 方法:prepareStatement ...