zoukankan      html  css  js  c++  java
  • Java MD5加密与反编译

    package hello1;

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;

    public class MdText{

    /*

    * @Description:TODO(main函数 门)

    *

    * @param args

    *

    * @return void

    */

      public stativ void main(String[] args){

        String s=new String("yunquegongmi");

        System.out.println("要加密的字符串为" + s);

        System.out.println("已加密的字符串为" + md5(s));

        System.out.println("MD5后再加密为" + KL(md5(s)));

        System.out.println("MD5再加密后解密为" + jm(KL(md5(s))));

      }

    /*

    * @Description:TODO(进行32位的MD5加密)

    *

    * @param String inStr 要解密的字符串

    *

    * @return void

    *

    * 思路:

    * 1.获取到MD5这个对象

    * 2.加密

    */

      public static String md5(String inStr){

        MessageDigest md5=null;

        // 1.获取MD5这个对象,获取信息摘要对象

        try{

        md5=MessageDigest.getInstance("MD5");

        }catch(NoSuchAlgorithmException e){

        e.printStackTrace();

        }

        // 2.将字符串对象中的每一个字符转换成一个字符数组——toCharArray()的用法

        char[] charArray = inStr.tiCharArray();

        // 3.定义一个长度和char数组相同的byte字节数组

        byte[] byteArray = new byte[charArray.length];

        // 4.将char数组中的内容放到byte数组中

        for(int i=0;i<charArray.length;i++){

          // {} for{} if{} 里面的代码只有一行的时候 {}可以省略

          byteArray[i] = (byte)charArray[i];

        }

        // 5.md5这个对象 对字节数组进行摘要 得到一个摘要字节数组

        byte[] md5Bytes = md5.digest(byteArray);

        // 6.把摘要字节数组中的每一个字节转换成16进制 并且拼在一起就得到了MD5值

        // StringBuffer:对字符串进行操作 操作字符串的一个工具箱

        StringBuffer hexValue=new StringBuffer();

        for(int i=0;i<md5Bytes.length;i++){

          // 转换成16进制 int 整数型

          int val=((int)md5Bytes[i]) & 0xff;

          // 如果生成的数字未满32位,需要在前面补0

          if(val<16){

            hexValue.append("0");

            // Integer.toHexString(val) 将其转为16进制的方法

            hexValue.append(Integer.toHexString(val));

          }

        }

        return hexValue.toString();

      }

    // 可逆的加密算法 加盐加密

    /*

    * @Description:TODO(可逆的加密算法 加盐加密)

    *

    * @param String inStr 要加密的字符串

    *

    * @return String

    */

       public static String KL(String inStr){

       // 将字符串转换成一个字符数组 给每个字符加密

        char[] charArray = inStr.toCharArray();

        for(int i=0;i<charArray.length;i++){     

        /*

        * ^ 异或运算符 如果a[i],'t'两个值不相同 异或结果就为1 如果相同的话就为0

        */

          charArray[i] = (char) (charArray[i] ^ 't');

        }

        String s = new String(charArray);

        return s;

       }

    // MD5加密以后 他会生成不同的字符串 不能反编译

    /*

    *@Description:TODO(反编译)

    *

    *@param String inStr 要解密的字符串

    *

    *@return String

    */

      public static String jm(Stirng inStr){

         // 将字符串转换成为一个字符数组,给每一个字符进行解密

         char[] charArray = inStr.toCharArray();

         for(int i=0;i<charArray.length;i++){

           charArray[i] = (char)(charArray[i] ^ 't');

         }

         String k=new String(charArray);

         return k;

      }

    }

    小知识点:

    位,字节与字符

    位(bit):是计算机 存储信息 的最小单位

    字节(Byte):是计算机 存储容量 的基本单位,常用 B 表示,1B=8bit

    ASCIIS码:

    1个英文字母(不分大小写)=1个字节

    1个中文字=2个字节

    1个ASCII码=1个字节

    UTF-8码:

    1个英文字符=1个字节

    1个英文标点=1个字节

    1个繁体中文=3个字节

    1个中文标点=3个字节

    Unicode码:

    1个英文字符=2个字节

    1个英文标点=2个字节

    1个繁体中文=2个字节

    1个中文标点=2个字节

    字符:是计算机使用的数字,字母,符号,例:1,2,3,a,s,d,#,%,$等等

  • 相关阅读:
    联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
    联想 Z5S(L78071)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.370
    联想 Z5(L78011) 免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.254
    联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
    第二阶段 冲刺八
    第二阶段 冲刺七
    第二阶段 冲刺六
    第二阶段 冲刺五
    代码大全阅读笔记03
    学习进度十二
  • 原文地址:https://www.cnblogs.com/chenyuan7/p/9354487.html
Copyright © 2011-2022 走看看