• 利用Java自带的MD5加密java.security.MessageDigest;


        MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。 Java JDK已经自带了MD5的实现,只要简单调用下就可以。(from 百度百科)

     
    1. import java.security.MessageDigest;  
    2. import java.security.NoSuchAlgorithmException;  
    3.   
    4. public class CreateMD5 {  
    5.   
    6.     //静态方法,便于作为工具类  
    7.     public static String getMd5(String plainText) {  
    8.         try {  
    9.             MessageDigest md = MessageDigest.getInstance("MD5");  
    10.             md.update(plainText.getBytes());  
    11.             byte b[] = md.digest();  
    12.   
    13.             int i;  
    14.   
    15.             StringBuffer buf = new StringBuffer("");  
    16.             for (int offset = 0; offset < b.length; offset++) {  
    17.                 i = b[offset];  
    18.                 if (i < 0)  
    19.                     i += 256;  
    20.                 if (i < 16)  
    21.                     buf.append("0");  
    22.                 buf.append(Integer.toHexString(i));  
    23.             }  
    24.             //32位加密  
    25.             return buf.toString();  
    26.             // 16位的加密  
    27.             //return buf.toString().substring(8, 24);  
    28.         } catch (NoSuchAlgorithmException e) {  
    29.             e.printStackTrace();  
    30.             return null;  
    31.         }  
    32.   
    33.     }  
    34.       
    35.     public static void main(String[] args) {      
    36.         //测试      
    37.         System.out.println(CreateMD5.getMd5("hello"));  
    38.     }  
    39.   
    40. }  

    package test.md5;

    import java.security.MessageDigest;

    public class MD5Util {
        public final static String MD5(String s) {
            char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
           

            try {
                byte[] btInput = s.getBytes();
                // 获得MD5摘要算法的 MessageDigest 对象
                MessageDigest mdInst = MessageDigest.getInstance("MD5");
                // 使用指定的字节更新摘要
                mdInst.update(btInput);
                // 获得密文
                byte[] md = mdInst.digest();
                // 把密文转换成十六进制的字符串形式
                int j = md.length;
                char str[] = new char[j * 2];
                int k = 0;
                for (int i = 0; i < j; i++) {
                    byte byte0 = md[i];
                    str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                    str[k++] = hexDigits[byte0 & 0xf];
                }
                return new String(str);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        public static void main(String[] args) {
            System.out.println(MD5Util.MD5("20121221"));
            System.out.println(MD5Util.MD5("加密"));
        }
    }

    http://www.iteye.com/topic/1127319

    方法一、 运行下列命令
     import java.security.MessageDigest;
      public class Test_MD5{
      public final static String MD5(String s) {
      char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f' };
      try {
      byte[] strTemp = s.getBytes();
      //使用MD5创建MessageDigest对象
      MessageDigest mdTemp = MessageDigest.getInstance("MD5");
      mdTemp.update(strTemp);
      byte[] md = mdTemp.digest();
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
      byte b = md[i];
      //System.out.println((int)b);
      //将没个数(int)b进行双字节加密
      str[k++] = hexDigits[b >> 4 & 0xf];
      str[k++] = hexDigits[b & 0xf];
      }
      return new String(str);
      } catch (Exception e) {return null;}
      }
      //测试
      public static void main(String[] args) {
      System.out.println("caidao的MD5加密后:
    "+Test_MD5.MD5("caidao"));
      System.out.println(""));
      }
      }
    2
    MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被"篡改"。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字****应用。
      MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不"知道"用户的密码是什么。
      MD5理论上是一种单向的哈希散列,一些黑客破获这种密码的方法是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。
      即使假设密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)....+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘组,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。
    3
    方法二、
     import java.security.spec.*;
      class MD5_test {
      public final static String MD5(String s) {
      char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f' };
      try {
      byte[] strTemp = s.getBytes();
      MessageDigest mdTemp = MessageDigest.getInstance("MD5");
      mdTemp.update(strTemp);
      byte[] md = mdTemp.digest();
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
      byte byte0 = md[i];
      str[k++] = hexDigits[byte0 >>> 4 & 0xf];
      str[k++] = hexDigits[byte0 & 0xf];
      }
      return new String(str);
      } catch (Exception e) {
      return null;
      }
      }
      public static void main(String[] args) {
      // MD5_Test aa = new MD5_Test();
      System.out.print(MD5_test.MD5("b"));
      }
      }
      加密,解密
      import java.security.MessageDigest;
      public class MD5andKL {
      // MD5加码。32位
      public static String MD5(String inStr) {
      MessageDigest md5 = null;
      try {
      md5 = MessageDigest.getInstance("MD5");
      } catch (Exception e) {
      System.out.println(e.toString());
      e.printStackTrace();
      return "";
      }
      char[] charArray = inStr.toCharArray();
      byte[] byteArray = new byte[charArray.length];
      for (int i = 0; i < charArray.length; i++)
      byteArray[i] = (byte) charArray[i];
      byte[] md5Bytes = md5.digest(byteArray);
      StringBuffer hexValue = new StringBuffer();
      for (int i = 0; i < md5Bytes.length; i++) {
      int val = ((int) md5Bytes[i]) & 0xff;
      if (val < 16)
      hexValue.append("0");
      hexValue.append(Integer.toHexString(val));
      }
      return hexValue.toString();
      }
      // 可逆的加密算法
      public static String KL(String inStr) {
      // String s = new String(inStr);
      char[] a = inStr.toCharArray();
      for (int i = 0; i < a.length; i++) {
      a[i] = (char) (a[i] ^ 't');
      }
      String s = new String(a);
      return s;
      }
      // 加密后解密
      public static String JM(String inStr) {
      char[] a = inStr.toCharArray();
      for (int i = 0; i < a.length; i++) {
      a[i] = (char) (a[i] ^ 't');
      }
      String k = new String(a);
      return k;
      }
      // 测试主函数
      public static void main(String args[]) {
      String s = new String("a");
      System.out.println("原始:" + s);
      System.out.println("MD5后:" + MD5(s));
      System.out.println("MD5后再加密:" + KL(MD5(s)));
      System.out.println("解密为MD5后的:" + JM(KL(MD5(s))));
      }
      }
    4
    方法三、
    package endecrypt;
      import java.io.UnsupportedEncodingException;
      import java.security.MessageDigest;
      import java.security.NoSuchAlgorithmException;
      /**
      * 采用MD5加密解密
      * @author tfq
      * @datetime 2011-10-13
      */
      public class MD5Util {
      /***
      * MD5加码 生成32位md5码
      */
      public static String string2MD5(String inStr){
      MessageDigest md5 = null;
      try{
      md5 = MessageDigest.getInstance("MD5");
      }catch (Exception e){
      System.out.println(e.toString());
      e.printStackTrace();
      return "";
      }
      char[] charArray = inStr.toCharArray();
      byte[] byteArray = new byte[charArray.length];
      for (int i = 0; i < charArray.length; i++)
      byteArray[i] = (byte) charArray[i];
      byte[] md5Bytes = md5.digest(byteArray);
      StringBuffer hexValue = new StringBuffer();
      for (int i = 0; i < md5Bytes.length; i++){
      int val = ((int) md5Bytes[i]) & 0xff;
      if (val < 16)
      hexValue.append("0");
      hexValue.append(Integer.toHexString(val));
      }
      return hexValue.toString();
      }
      /**
      * 加密解密算法 执行一次加密,两次解密
      */
      public static String convertMD5(String inStr){
      char[] a = inStr.toCharArray();
      for (int i = 0; i < a.length; i++){
      a[i] = (char) (a[i] ^ 't');
      }
      String s = new String(a);
      return s;
      }
      // 测试主函数
      public static void main(String args[]) {
      String s = new String("tangfuqiang");
      System.out.println("原始:" + s);
      System.out.println("MD5后:" + string2MD5(s));
      System.out.println("加密的:" + convertMD5(s));
      System.out.println("解密的:" + convertMD5(convertMD5(s)));
      }
      }
  • 相关阅读:
    Visual Studio 连接不上NuGet 官方程序包源的解决办法
    Microsoft Toolkit 2.5下载 – 一键激活Windows 8.1/2012 R2/Office 2013
    Intel® Ethernet Connection I217-V 网卡驱动(win10 ,2012)
    flashfxp3.41中文版注册码:(适合最新版本)
    Fiddler对安卓应用手机抓包图文教程
    网址检查器1.0
    Win10打不开chm文件的解决办法
    Android HTTP通讯
    对Android开发者有益的40条优化建议
    IIS下PHP的三种配置方式比较
  • 原文地址:https://www.cnblogs.com/timssd/p/5828165.html
Copyright © 2020-2023  润新知