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

  • 相关阅读:
    jvisualm 结合 visualGC 进行jvm监控,并分析垃圾回收
    linux 查看服务器cpu 与内存配置
    arthas 使用总结
    selinux contexts 安全上下文的临时更改
    Android 8.1 Doze模式分析(五) Doze白名单及Debug方式
    Window 任意窗口置顶软件Window TopMost Control
    Android ApkToolPlus一个可视化的跨平台 apk 分析工具
    SVN Please execute the 'Cleanup' command.
    Android 如何在64位安卓系统中使用32位SO库
    Android cmd命令查看apk是32位还是64位?
  • 原文地址:https://www.cnblogs.com/chenyuan7/p/9354487.html
Copyright © 2011-2022 走看看