zoukankan      html  css  js  c++  java
  • MD5 加密算法的使用

      最近在看视频时,看到 MD5 的加密算法,感觉其在某些重要信息中,还是很好的解决了一些安全问题的。于是,就在自己理解的情况下,实现了 MD5 算法。

      具体的流程大致是:

      (1)将指定的数据首先通过 MessageDigest 类转为 MD5 的表现形式

      (2)将 MD5 表现形式的数据,将其每个字节,转为 16 进制的表示方法

    具体的实现方式如下:

    /**
     * 0.0.0.1
     */
    package com.test.common;
    
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    import org.apache.log4j.Logger;
    
    /**
     * MD5加密测试
     * @author 高青
     * 2014-4-21
     */
    public class MD5Security {
        
        /** 日志对象 */
        private static Logger log = Logger.getLogger(MD5Security.class);
        
        /** 十六进制数组 */
        private static char[] hexArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    
        /**
         * 构造方法
         */
        public MD5Security() {
            // TODO Auto-generated constructor stub
        }
    
        /**
         * 主线程方法
         * @author 高青 
         * 2014-4-21
         * @param args 字符串参数集
         * @return*/
        public static void main(String[] args) {
            //加密的信息
            String securityInfo = "a";
            
            try {
                //通过 JAVA 的 Security 包,得到 MD5 表示方式 的字节数组
                MessageDigest instance = MessageDigest.getInstance("MD5");
                
                //此字节数据是 128 位的长整数,即是 16 个字节表示的数据
                byte[] digest = instance.digest(securityInfo.getBytes());
                
                
                //转换为 16 进制后的字节数组
                char[] hexByte = new char[16*2];
                //记录 当前计算后的字节在 十六进制字节数组中的位置
                int k = 0;
                
                //循环遍历 MD5 中的每个字节,并将每个字节改成对应的 16 进制进行表示
                for (int i = 0; i < 16; i++) {
                    
                    //计算当前字节的高四位所对应的十六进制数
                    hexByte[k++] = hexArr[digest[i] >>> 4 & 0xf];
                    
                    //计算当前字节的低四位所对应的十六进制数
                    hexByte[k++] = hexArr[digest[i] & 0xf];
                }
                //将转化后的字符数组转为 String 类型
                String hexString = new String(hexByte);
                System.out.println(hexString);
                
            } catch (NoSuchAlgorithmException e) {
                log.info("实例化 MessageDigest 对象异常!");
                e.printStackTrace();
            }
        }
    }

     加密后的结果为:0cc175b9c0f1b6a831c399e269772661

  • 相关阅读:
    5
    4
    3
    crontab -e 报错(E518: Unknown option: foldenable)
    解决无法修改日志时间的问题(Local time zone must be set--see zic manual page 2019 )
    ping测试丢包率
    关闭SELinux
    iotop使用方法
    mysql的备份
    修改uid gid 的起始范围
  • 原文地址:https://www.cnblogs.com/gaoqing/p/3678039.html
Copyright © 2011-2022 走看看