• 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,#,%,$等等

  • 相关阅读:
    Mybatis源代码分析之类型转换
    eclipse中对于@override注解的函数报父类没有该方法
    Mybatis源代码分析之metadata包
    Android GC
    有道单词本导出xml转换.
    广播的接收与U盘广播
    Bitmap和Drawable相互转换方法
    如何提交程序到Android Market
    error parsing xml:unbound prefix
    android获取屏幕尺寸、密度
  • 原文地址:https://www.cnblogs.com/chenyuan7/p/9354487.html
Copyright © 2020-2023  润新知