• 关于java中MD5加密(可直接使用)


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

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

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

  • 相关阅读:
    图片的使用
    对话框
    窗体
    浏览器与android移动端视频互播技术实现
    Arcengine实现创建网络数据集札记(三)
    Arcengine实现创建网络数据集札记(二)
    Arcengine实现创建网络数据集札记(一)
    2019年年初iOS招人心得笔记(附面试题)
    2019年,200道面试题打造最受企业欢迎的iOS程序猿!
    BAT面试总结——iOS开发高级工程师
  • 原文地址:https://www.cnblogs.com/dudadi/p/8059549.html
Copyright © 2020-2023  润新知