本文转自: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. Silver Cow Party POJ - 3268

    #include<iostream> #include<queue> #include<cstring> using namespace std; +,INF=0x ...

  2. c++ STL vector初步学习

    /*vector(向量):是一种顺序容器,,动态数组,事实上和数组差不多,但它比数组更优越.一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界.而vector正好弥补了这个缺陷, ...

  3. linux下载phantomjs记录

    step1:建目录: cd /root mkdir PhantomJS step2:下载phantomjs安装包 可以直接进网址下载到本地后,再传到linux路径,例如phantomjs-1.9.7- ...

  4. 微信小程序配置合法域名和业务域名

    在微信小程序的开发过程中,当需要请求第三方网站数据时,都是直接调用wx.request接口的: xxxx:function(){ wx.request({ url: 'xxxxxxxxxx', dat ...

  5. python之爬虫(爬取.ts文件并将其合并为.MP4文件——以及一些异常的注意事项)

    //20200115 最近在看“咱们裸熊——we bears”第一季和第三季都看完了,单单就第二季死活找不到,只有腾讯有资源,但是要vip……而且还是国语版……所以就瞄上了一个视频网站——可以在线观看 ...

  6. 改善深层神经网络(三)超参数调试、Batch正则化和程序框架

    1.超参数调试: (1)超参数寻找策略: 对于所有超参数遍历求最优参数不可取,因为超参数的个数可能很多,可选的数据过于庞大. 由于最优参数周围的参数也可能比较好,所以可取的方法是:在一定的尺度范围内随 ...

  7. [CF269B] Greenhouse Effect - dp

    给出 N 个植物,每个植物都属于一个品种,共计 m 个品种,分落在不同的位置上(在一个数轴上,而且数轴是无限长度的),保证读入的位置是按照升序读入的. 现在我们可以进行一个操作:取任意一个位置上的植物 ...

  8. linux 6.9 补丁修补漏洞

    1 先将openssh-8.0p1.tar.gz 上传到 root下的/opt 文件夹下 解压  tar -zxvf openssh-8.0p1.tar.gz  -C /opt 2 启动vncserv ...

  9. LVS笔试题!

    1.集群分类有哪些及各自实现的目标?高可用:保持系统的稳定,防止系统出现单点故障.负载均衡:比如高并发状态下,多个机器分摊请求,从而达到负载均衡高性能运算集群:比如hadoop分布式计算框架,把多个机 ...

  10. git 报错和解决

    1.报错 fatal: refusing to merge unrelated histories 解决 两个不相干的库进行合并,需要进行强制合并 git pull origin master --a ...