public byte[] a(String str, int i, String str2) {
StringBuffer stringBuffer = new StringBuffer();
if (str != null) {
stringBuffer.append(str);
}
stringBuffer.append(i);
stringBuffer.append(str2);
stringBuffer.append("mMcShCsTr");
Log.d("TAG111", "_mmessage_checksum: " + c(stringBuffer.toString().substring(1, 9).getBytes()));
return c(stringBuffer.toString().substring(1, 9).getBytes()).getBytes();
}
public static final String c(byte[] bArr) {
char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try {
MessageDigest instance = MessageDigest.getInstance("MD5");
instance.update(bArr);
byte[] digest = instance.digest();
int length = digest.length;
char[] cArr2 = new char[(length * 2)];
int i = 0;
int i2 = 0;
while (i < length) {
byte b = digest[i];
int i3 = i2 + 1;
cArr2[i2] = cArr[(b >>> 4) & 15];
cArr2[i3] = cArr[b & 15];
i++;
i2 = i3 + 1;
}
return new String(cArr2);
} catch (Exception e) {
return null;
}
}
@大尨,
输出:
为什么
c
函数不见了?因为调试后发现c
函数实际上就是PHP中的md5()
,以下这段代码就是在做bin2hex()
:看下面这个调试输出就明白了:
输出是这样:
说明
byteToHex(digest)
就是最终结果,而digest
是md5值的二进制表示,按PHP写法就是$digest = md5($bArr, true)
,所以后面那段代码就相当于$cArr2 = bin2hex($digest)
。其实再精简一下可以写成:
输出:
看到这里,你该相信PHP是世界上最好的语言了吧


@hik,这三行是调用Java版的md5计算函数。
后续代码是在做bin2hex,把字节转换成十六进制表示:
所以真正计算md5的函数并不在这里。