在进行请求时,e签宝API网关根据请求头中的 Content-MD5 值来校验请求Body体中的数据在传输过程中是否完整或篡改。当e签宝API网关接收到请求Body体时,将e签宝API网关对Body体所计算的 Content-MD5 值和请求头中的 Content-MD5 进行比对,两者一致时说明传输过程中数据完整且未被篡改。
请求Body体Content-MD5计算说明
请求Body体的 Content-MD5 值的计算步骤说明如下:
(1)先对请求Body体中的数据(如JSON字符串)的二进制Byte数组进行计算获得MD5加密后的二进制Byte数组(128位)。
(2)再对这个MD5加密后所获得的二进制Byte数组进行Base64编码(注意不是对MD5的32位字符进行编码)。
请求Body体Content-MD5计算代码示例
JAVA代码示例
public static void main(String[] args) { String bodyData = "{\"name\":\"张某人\",\"age\":18}"; String bodyContentMD5 = getBodyContentMD5(bodyData); System.out.println("请求Body体Content-MD5值:" + bodyContentMD5); } /*** * 计算请求Body体的Content-MD5 * @param bodyData 请求Body体数据 * @return */ public static String getBodyContentMD5(String bodyData) { // 获取Body体的MD5的二进制数组(128位) byte[] bytes = getBodyMD5Bytes128(bodyData); // 对Body体MD5的二进制数组进行Base64编码 return new String(Base64.encodeBase64(bytes)); } /*** * 获取MD5-二进制数组(128位) * * @param bodyData 请求Body体数据 * @return */ public static byte[] getBodyMD5Bytes128(String bodyData) { byte[] md5Bytes = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(bodyData.getBytes(StandardCharsets.UTF_8)); md5Bytes = md5.digest(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return md5Bytes; }
PHP代码示例
$bodyData = "{\"name\":\"张某人\",\"age\":18}"; // Body体的Content-MD5值 $bodyContentMD5 = getBodyContentMD5($bodyData); echo("请求Body体Content-MD5值:".$bodyContentMD5); function getBodyContentMD5($bodyData){ //计算Body体的Content-MD5 $md5Bytes = md5($bodyData,true); $contentMD5 = base64_encode($md5Bytes); return $contentMD5; }
.NET代码示例
public static void Main(string[] args) { string bodyData = "{\"name\":\"张某人\",\"age\":18}"; string bodyContentMD5 = GetBodyContentMD5(bodyData); MessageBox.Show("请求Body体Content-MD5值:" + bodyContentMD5); } public static string GetBodyContentMD5(string bodyData) { string contentMD5 = null; try { System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); // 先计算出上传内容的MD5,其值是一个128位(128 bit)的二进制数组 byte[] md5Bytes = md5.ComputeHash(bodyData.GetBytes("UTF-8")); // 再对这个二进制数组进行base64编码 contentMD5 = Convert.ToBase64String(md5Bytes).ToString(); return contentMD5; } catch (Exception ex) { MessageBox.Show("错误信息", "计算Body体的Content-MD5值时发生异常:" + ex.Message); return contentMD5; } }