md5 原理

来源:互联网 发布:巅峰霍华德身体数据 编辑:程序博客网 时间:2024/06/05 05:15

最近一个项目需要模拟md5的实现过程,经过两天的研究终于对md5的加密原来有了一点了解

1、是对m[0]-m[15]矩阵的数据的填充

2、经过4轮,每轮16步步骤的运算

第一轮的逻辑运算:F(x,y,z)=(x & y) | ((~x) & z);

第二轮的逻辑运算:G (x,y.z)=(x & z) | (y & (~z);

第三轮的逻辑运算:H(x,y,z)=x ^ y ^ z;

第四轮的逻辑预算:I(x,y,z)=y ^ (x | (~z));


里面涉及到一个十六进制准换成二进制的方法

public class HexStringConvertBinary {


public static  Map<String,String> hexToBinary=new HashMap<String, String>();

static{

hexToBinary.put("0", "0000");
hexToBinary.put("1", "0001");
hexToBinary.put("2", "0010");
hexToBinary.put("3", "0011");
hexToBinary.put("4", "0100");
hexToBinary.put("5", "0101");
hexToBinary.put("6", "0110");
hexToBinary.put("7", "0111");
hexToBinary.put("8", "1000");
hexToBinary.put("9", "1001");
hexToBinary.put("A", "1010");
hexToBinary.put("B", "1011");
hexToBinary.put("C", "1100");
hexToBinary.put("D", "1101");
hexToBinary.put("E", "1110");
hexToBinary.put("F", "1111");

}


}


还涉及到两个二进制的异或比较


/**
 * 异或比较
 * */
public class BinaryXORString {

public static String xorBinary(String upBinary,String downBinary){

StringBuffer strBuf=new StringBuffer();

if(null!=upBinary&&!"".equals(upBinary)&&null!=downBinary&&!"".equals(downBinary)){

for(int i=0;i<upBinary.length();i++){

String up=upBinary.substring(i, i+1);
String down=downBinary.substring(i, i+1);

if(up.equals(down)){
strBuf.append(0);
}else{
strBuf.append(1);
}

}

}

return strBuf.toString();

}


}




原创粉丝点击