问题
在Android 客户端对接口数据签名验证时,遇到了md5签名少0的情况,导致签名也正不通过。
解决
代码如下:
/**
* 对字符串进行32位签名
* @param value
* @return
* @throws NoSuchAlgorithmException
*/
public static String md5Encrypt(String value) throws NoSuchAlgorithmException {
MessageDigest digester = MessageDigest.getInstance("MD5");
digester.reset();
return bytes2HexString(digester.digest(value.getBytes()));
}
/**
* 二进制转十六进制String
* @param bytes
* @return
*/
private static String bytes2HexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
//方法一
int val = ((int)bytes[i]) & 0xff;
if(val < 16) {
sb.append("0"); //当转换十进制,会忽略掉前面的"0"
}
sb.append(Integer.toHexString(val));
//方法二
/*String s = Integer.toHexString(b[i] & 0xff);
if (s.length() == 1) {
sb.append("0");
}
sb.append(s);*/
}
return sb.toString();
}