md5算法
先解释下:
MD5是不可逆,这里的加密解密,你可以看到是对MD5算法先加密后解密,而不是对MD5的解密
package com.test;
import java.security.messageDigest;
public class DecryptMD5 {
// MD5加码。32位
public static String MD5(String inStr) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getinstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printstacktrace();
return "";
}
char[] charArray = inStr.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.APPend("0");
hexValue.append(integer.toHexString(val));
}
return hexValue.toString();
}
// 可逆的加密算法
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 JM(String inStr) {
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++) {
a[i] = (char) (a[i] ^ 't');
}
String k = new String(a);
return k;
}
// 测试主函数
public static void main(String args[]) {
String s = new String("sa");
System.out.println("原始:" + s);
System.out.println("MD5后:" + MD5(s));
System.out.println("MD5后再加密:" + KL(MD5(s)));
System.out.println("解密为MD5后的:" + JM(KL(MD5(s))));
}
}
相关阅读
Base64import java.security.InvalidKeyException; import java.security.Key; import java.security.NoSuchAlgorithmException;
EFS加密数据0x00 前言0x01 过程1. EFS 加密1.1 在user2中文件 新建文件夹 目录下---->右键属性---->高级---->勾上“加密内容以保
原创:信息时代的
前不久一次ctf比赛里碰到的逆向题ida反编译出来一坨恶心的移位异或代码,当时直接蒙蔽谷歌也找不出,这次再度碰到类似的关键代码块也
1. 问题背景 使用相同的汉字字符串进行MD5计算,有时候会遇到:使用不同的在线工具,得到不同的MD5计算结果。 2. 原因 出现这样情况的