在进行请求时,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;
}
}