今天項目中遇到調一接口 驗證 sign 怎麼驗證 都很少。檢查 發現 相同的內容 兩次MD5 結果不同。算法
把包打開 檢查了一下 MD5 算法。一看才知道,寫這個代碼的人 沒有 指定字符集app
public class MD5Digest {編碼
private static MessageDigest md5=null;接口
public static String getDigest(String msg) throws UnsupportedEncodingException, NoSuchAlgorithmException {md5
if(null == md5) {get
md5=MessageDigest.getInstance("MD5");it
}io
byte[] byteArray=null;字符編碼
byteArray=msg.getBytes(); class
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();
}
byteArray=msg.getBytes();
在不一樣的環境下得到的結果多是不同的,這樣也形成不少MD5結果不同。
保證在不一樣環境下MD5結果相同那麼必須使用相同的字符編碼,好比:byteArray=msg.getBytes("UTF-8");