欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

MD5加密与解密的方法解析

最编程 2024-02-03 08:02:46
...

一、前言:

注意:MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密。

gitHub地址:https://gitee.com/lyyon/AESDemo/tree/master/app/src/main/java/com/sumansoul/aesdemo

1. 使用:

    /**
     * MD5使用
     * MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密
     */
    private void initMD5() {
        String value = "123456";
        Log.d("LUO","MD5原数据============"+value);
        //加密的MD5
        String md5Encode = MD5Utils.MD5Encode(value);
        Log.d("LUO","MD5加密后数据============"+md5Encode);

        //对解密的MD5,再加密
        String md5Encode_kl = MD5Utils.KL(MD5Utils.MD5Encode(value));
        Log.d("LUO","MD5_kl加密后数据============"+md5Encode_kl);
        //对解密的MD5,解加密
        String decrypt = MD5Utils.MD5Decrypt(md5Encode_kl);
        Log.d("LUO","MD5_kl解密后数据============"+decrypt);

//        LUO: MD5原数据============123456
//        LUO: MD5加密后数据============e10adc3949ba59abbe56e057f20f883e
//        LUO: MD5_kl加密后数据============�ED���GM@M��AM����AB�DAC�FD�LLG�
//        LUO: MD5_kl解密后数据============e10adc3949ba59abbe56e057f20f883e
    }

2. MD5Utils工具类:

package com.sumansoul.aesdemo.utils;

import java.security.MessageDigest;

/**
 * @Author:LUO
 * @Description:
 * @Date:Created in 9:46 2018/4/13
 * Modified By:
 */
public class MD5Utils {

    private static final String hexDigIts[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

    /**
     * MD5加密数据,32位
     */
    public static String MD5Encode(String value) {
        String resultString = null;
        try {
            resultString = new String(value);
            MessageDigest md = MessageDigest.getInstance("MD5");
            resultString = byteArrayToHexString(md.digest(resultString.getBytes("UTF-8")));
        } catch (Exception e) {
        }
        return resultString;
    }


    /**
     * MD5加密后解密(一定要KL()再用KL()解密)
     * MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密
     *
     * @param value
     * @return
     */
    public static String MD5Decrypt(String value) {
        char[] a = value.toCharArray();
        for (int i = 0; i < a.length; i++) {
            a[i] = (char) (a[i] ^ 't');
        }
        String k = new String(a);
        return k;
    }


    // 可逆的加密算法
    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 byteArrayToHexString(byte b[]) {
        StringBuffer resultSb = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            resultSb.append(byteToHexString(b[i]));
        }
        return resultSb.toString();
    }

    public static String byteToHexString(byte b) {
        int n = b;
        if (n < 0) {
            n += 256;
        }
        int d1 = n / 16;
        int d2 = n % 16;
        return hexDigIts[d1] + hexDigIts[d2];
    }


    // 测试主函数
//    public static void main(String args[]) {
//        String s = new String("sa");
//        System.out.println("原始:" + s);
//        System.out.println("MD5后:" + MD5Encode(s));
//        System.out.println("MD5后再加密:" + KL(MD5Encode(s)));
//        System.out.println("解密为MD5后的:" + MD5Decrypt(KL(MD5Encode(s))));
//    }


}

推荐阅读