zoukankan      html  css  js  c++  java
  • MD5

    1.工具类

     1 package com.java.test;
     2 
     3 import java.security.MessageDigest;
     4 
     5 public class MD5Util {
     6     
     7     public final static String MD5(String s) {
     8         char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};       
     9         try {
    10             byte[] btInput = s.getBytes();
    11             // 获得MD5摘要算法的 MessageDigest 对象
    12             MessageDigest mdInst = MessageDigest.getInstance("MD5");
    13             // 使用指定的字节更新摘要
    14             mdInst.update(btInput);
    15             // 获得密文
    16             byte[] md = mdInst.digest();
    17             // 把密文转换成十六进制的字符串形式
    18             int j = md.length;
    19             char str[] = new char[j * 2];
    20             int k = 0;
    21             for (int i = 0; i < j; i++) {
    22                 byte byte0 = md[i];
    23                 str[k++] = hexDigits[byte0 >>> 4 & 0xf];
    24                 str[k++] = hexDigits[byte0 & 0xf];
    25             }
    26             return new String(str);
    27         } catch (Exception e) {
    28             e.printStackTrace();
    29             return null;
    30         }
    31     }
    32 }
    MD5Util

    2.测试

     1 package com.java.test;
     2 
     3 import org.junit.Test;
     4 
     5 public class MD5UtilTest {
     6     
     7     @Test
     8     public void test(){
     9          System.out.println("md5:"+MD5Util.MD5("md5"));
    10          System.out.println(MD5Util.MD5("1234567890098765432112345678900987654321abcd"));
    11          System.out.println(MD5Util.MD5("1234567890098765432112345678900987654321a"));
    12     }
    13     
    14     @Test
    15     public void test1(){
    16         String p1 = "hello";
    17         String p2 = "hello";
    18         String pwd1 = MD5Util.MD5(p1);
    19         String pwd2 = MD5Util.MD5(p2);
    20         System.out.println(pwd1.equals(pwd2));
    21     }
    22     
    23 }
    MD5UtilTest

    控制台输出:

    md5:1BC29B36F623BA82AAF6724FD3B16718
    E85CC9E2A809720A20EA9880FCC09B5C
    952406404126799A09F24D598F1F1A10
    true

    3.MD5原理

      对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

    4.MD5深入理解

        数学上来说不可以逆向破解,它的破解都是碰撞和暴力破解。山东大学女教授王小云使用的也是碰撞破解方法(具体技术不详,可简单的理解为就是拿一个密码去加密试着生成一样的16进制密码,但是其实其明文是不同的,这样也就实现了两个不同明文密码生成了一样的MD5码,这也就是说你的密码被破解了,其实不是真正的知道了,而是找到了密码的同胞兄弟的意思,这样你的信息就被盗取了)。

    5.曾经的疑问

        MD5是无限集合到有限集合的映射,利用碰撞还是有可能破解MD5的(其实是一种「伪破解」)。这就是王小云教授提出MD5破解的原理所在。

    6.MD5在线破解网站

      http://cmd5.com/

  • 相关阅读:
    史上最详细 Linux 用户与用户组知识
    MySQL -2- 体系结构--随笔小记
    MySQL -2- 体系结构
    MySQL -1- 简介及安装
    MySQL -0- 课程大纲及课程链接
    探索Windows命令行系列(4):通过命令操作文件和文件夹
    探索Windows命令行系列(3):命令行脚本基础
    探索Windows命令行系列(2):命令行工具入门
    探索Windows命令行系列(1):导航目录
    Oracle 分页方法研究
  • 原文地址:https://www.cnblogs.com/helloIT/p/5605474.html
Copyright © 2011-2022 走看看