2019独角兽企业重金招聘Python工程师标准>>>
public static void main(String[] args) {
//t1();
/*t2();*/
//t3();
String s=new String("wanghuailou");
System.out.println("原始:"+s);
System.out.println("MD5后:"+t4(s));
System.out.println("加密的:"+converMD5(s));
System.out.println("解密的:"+converMD5(converMD5(s)));
}
/**
* 加密解密算法 执行一次加密,两次解密
* @param inStr
* @return
*/
public static String converMD5(String inStr){
char[]a=inStr.toCharArray();
for (int i=0;i<a.length;i++){
// 数组a中下标为i的值按位异或字符t
a[i]=(char)(a[i]^'t');
System.out.print(a[i]+"+");
}
String s=new String(a);
return s;
}
/**
* 采用MD5加密解密
* @param t4
* @return
*/
public static String t4(String t4){
/**
* MD5加码,生成32md5码
*/
MessageDigest md5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch (Exception e){
System.out.println(e.toString());
e.printStackTrace();
return "";
}
char[]charArray=t4.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++){
// byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性
int val=((int)md5Bytes[i])&0xff;
//0x是16进制,ff是16 它的二进制是 1111 1111,把它变成16进制前面直接补位,加6*4个0
if (val<16){
// 将不足16进制的地方补上0
hexValue.append("0");
}
// 将16进制添加到字符缓冲
hexValue.append(Integer.toHexString(val));
}
//将字符缓冲转换成字符串类型
return hexValue.toString();
}