MD5加密为不可逆加密:
/**
* <p>Title: MD5</p>
* <p>Description: </p>
* @author ZTC
*@date 2018年4月10日
* 2018年4月10日
*/
public class MD5 {
/***
* 字符串加密为MD5字符串
*/
public static String MD5(String str){
MessageDigest md5 = null;
try{
md5 = MessageDigest.getInstance("MD5"); //创建MD5加密使用的对象
}catch (Exception e){
System.out.println(e.toString());
e.printStackTrace();
return "";
}
char[] charArray = str.toCharArray(); //将传来的字符转化为数组
byte[] byteArray = new byte[charArray.length]; //初始化byte数组
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 encrypt(String inStr){
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++){
a[i] = (char) (a[i] ^ 's'); //在Java中,a[i]^'s'的意思是数组a中下标为i的值按位异或字符s.
}
String s = new String(a);
return s;
}
测试:
// 测试主函数
public static void main(String[] args) {
String s = new String("123456");
System.out.println("原始字符:" + s);
System.out.println("MD5加密后字符:" + MD5(s));
System.out.println("加密的字符:" + encrypt(s));
System.out.println("解密的字符:" + encrypt(encrypt(s)));
}
}
结果: