本文转自: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. Codeforce 567A - Lineland Mail

    All cities of Lineland are located on the Ox coordinate axis. Thus, each city is associated with its ...

  2. OrCAD Capture CIS绘制原理图、Allegro PCB Design XL 绘制PCB

    1.OrCAD Capture CIS绘制原理图 1.1.快捷键 (1)放置连线         w (2)放置net名称      n     放下一个时再按n可以编辑名字 (3)编辑属性      ...

  3. 机器学习作业(四)神经网络参数的拟合——Matlab实现

    题目下载[传送门] 题目简述:识别图片中的数字,训练该模型,求参数θ. 第1步:读取数据文件: %% Setup the parameters you will use for this exerci ...

  4. 腾讯云OCR图片文字识别

    一. OCR OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别 ...

  5. 广度优先搜索(Breadth First Search, BFS)

    广度优先搜索(Breadth First Search, BFS) BFS算法实现的一般思路为: // BFS void BFS(int s){ queue<int> q; // 定义一个 ...

  6. IntelliJ IDEA构建多Module项目

    打开IDEA 创建完成项目后,我们创建子模块 可以看到common子模块创建成功,子模块的名字大家可以根据自己的实际需求来修改 下面我们再创建子模块 给子模块起个名字 现在已经创建好多模块的项目了,下 ...

  7. 怎么编写API和或者自己不属于知识小案例demo程序

    再使用一个函数,进行测试的调用,然后进行调用这样就不需要再为makefile什么,还有就是改什么鬼东西烦恼了. 然后把需要的功能进行分解就行了.

  8. LitElement(四)属性

    1.概述 LitElement管理您声明的属性及其对应的属性.默认情况下,LitElement将: 确保在任何声明的属性更改时进行元素更新. 捕获已声明属性的实例值.在浏览器注册自定义元素定义之前设置 ...

  9. Java对象构成所有Java应用程序的基础

    通过在优锐课的ange交流下,掌握了很多编程思想方法 特来分享 对象具有状态和行为 Java中的对象以及其他任何``面向对象''语言都是所有Java应用程序的基本组成部分,代表了你可能在你周围找到的任 ...

  10. android 获取颜色 getColor 方法 deprecated 过期

    可以使用下面代码代替: ContextCompat.getColor(getContext(), R.color.post_list_content_color) 需要引入: compile 'com ...