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

 

转载于:https://www.cnblogs.com/chenyuan7/p/9354487.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用MD5加密算法对数据进行加密。引用是一个示例代码,展示了如何使用MD5加密算法对输入的用户名和密码进行加密。代码中使用了一个Md5类,它包含了一个md5方法,用于对输入数据进行MD5加密。引用展示了Md5类的具体实现。 要使用MD5加密对密码进行加密,可以调用Md5类的md5方法,并传入要加密的字符串作为参数。该方法将返回加密后的字符串。 在加密时,可以使用“加盐”的方式增加密码的安全性。这意味着将用户的用户名作为额外的参数传入md5方法,与密码一起进行加密。这样即使两个用户使用相同的密码,最终的加密结果也会不同。 需要注意的是,MD5加密是不可逆的,即无法从加密后的密码还原出原始密码。因此,一般在登录时,会将用户输入的密码进行加密后,与数据库中存储的加密后的密码进行比对来验证登录信息。引用展示了一个示例,其中将用户输入的密码进行MD5加密后,再与数据库中存储的密码进行比对。 综上所述,要在Java中进行MD5加密,可以使用Md5类的md5方法,将要加密的字符串作为参数传入。为了增加密码的安全性,可以使用“加盐”的方式,将用户的用户名作为额外的参数传入md5方法进行加密。在登录时,将用户输入的密码进行MD5加密后,与数据库中存储的加密后的密码进行比对来验证登录信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java md5加密](https://blog.csdn.net/weixin_65637841/article/details/124889207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值