防止数据在传输过程被篡改,使用HMAC-MD5 签名算法校验数据。
HMAC-MD5算法
HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))
其中:K是密钥(OperatorSecret),长度可为64字节,若小于该长度,在密钥后面用“0”补齐。
M是消息内容;
H是散列函数;
opad和Ipad分别是由若干个0x5c和0x36组成的字符串;
⊕表示异或运算;
∣表示连接操作。
(2)HMAC-MD5流程
1) 在签名密钥(SigSecret)后面添加0来创建一个长为64字节的字符串(str);
2) 将上一步生成的字符串(str)与ipad(0x36)做异或运算,形成结果字符串(istr);
3)将消息内容data附加到第二步的结果字符串(istr)的末尾;
4)做md5运算于第三步生成的数据流(istr);
5) 将第一步生成的字符串(str)与opad(0x5c)做异或运算,形成结果字符串(ostr);
6)再将第四步的结果(istr)附加到第五步的结果字符串(ostr)的末尾;
7)做md5运算于第六步生成的数据流(ostr),输出最终结果(out)。
import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * @Title: HMacMD5Util * @Description: HMacMD5 数据签名 * @author chy * @date 2018/6/11 15:32 */ public class HMacMD5Util { /** * 计算参数的md5信息 * * @param str 待处理的字节数组 * @return md5摘要信息 * @throws NoSuchAlgorithmException */ private static byte[] md5(byte[] str) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str); return