MD5/SHA256 簽名產生規則
點播系統子帳號模組及取得影片播放憑證預設採用 MD5 簽名規則,也支援透過請求參數 signatureMethod=SHA256 指定 SHA256 簽名規則;其他大部分點播模組的簽名採用 SHA1 簽名規則,具體如下:
- 取得子帳號 appid、secretkey 簽名關鍵資訊,登入官網 -> 選擇任一項點播功能 -> 設定 -> 帳號管理 -> 選擇子帳號修改功能(如無子帳號,請新增子帳號),如下:
注意:只有子帳號角色為內容分發的子帳號才有 appid、secretkey



- 採用 MD5 簽名演算法產生簽名,具體加密計算方法如下:
2.1 將請求所需參數(參數值非空的參數)依照參數名字典順序排列,連接參數名與參數值,例如:ts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1;
2.2 並在拼接字串首尾加上 secretKey,以 secretKey 為 abc 為例,得到:abcts1552447784505userIde6b23c6f51videoIde6b23c6f51c4b1cb9f0302a92ed42440_eviewerIdabcd1234viewerIp127.0.0.1abc
2.3 然後採用 UTF-8 編碼計算 MD5,將 MD5 結果轉為大寫字母,作為 sign;
常見問題:
字串拼接時未將參數值為 null 的參數剔除;
簽名自用字元集必須為 UTF-8,若未指定,可能採用平台預設字元集,導致錯誤;
其他
SHA256 簽名演算法(可選)
本平台也支援 SHA256 簽名演算法計算簽名,具體加密計算方法如下:
- 指定請求參數 signatureMethod=SHA256,如無此參數預設使用 MD5 簽名
- 將請求參數(參數值非空的參數)按 key(參數名)字典順序(ASCII 值大小)升序排列
- 將參數連接參數名與參數值拼成 key1value1key2value2...keyNvalueN
- 將拼接字串首尾加上 secretKey
- 對拼接字串採用 UTF-8 編碼計算 SHA256,將 SHA256 結果轉為大寫字母,作為 sign
快速接入基礎程式碼請 下載相關依賴原始碼,點擊下載原始碼,下載後加入自己的原始碼工程中即可。測試案例中的 HttpUtil.java 和 VodSignUtil.java 都包含在下載檔案中。
強烈建議您使用點播 Java SDK 完成 API 的功能對接,點播 Java SDK 對 API 呼叫邏輯、異常處理、資料簽名、HTTP 請求執行緒池進行了統一封裝和最佳化。
package net.polyv.common;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.polyv.util.VodSignUtil;
/**
* @author: thomas
**/
public class VodSignTest {
private static final Logger log = LoggerFactory.getLogger(VodSignTest.class);
@Test
public void buildSubSign() throws UnsupportedEncodingException, NoSuchAlgorithmException {
String appid = "XXXXXXXX";
String secretkey = "XXXXXXXXXXXXXXXXXXXXXXXX";
long timestamp = System.currentTimeMillis();
Map<String, String> paramMap = new HashMap<String, String>();
//公共参数
paramMap.put("appId", appid);
paramMap.put("timestamp", Long.toString(timestamp));
//业务参数
paramMap.put("vid","1b448be3233659acf35d430ba9210bd4_1");
String sign = VodSignUtil.getSignMd5(paramMap, secretkey);
log.debug("生成签名:{}",sign);
}
@Test
public void buildSubSHA256Sign() throws UnsupportedEncodingException, NoSuchAlgorithmException {
String appid = "XXXXXXXX";
String secretkey = "XXXXXXXXXXXXXXXXXXXXXXXX";
long timestamp = System.currentTimeMillis();
Map<String, String> paramMap = new HashMap<String, String>();
//公共参数
paramMap.put("appId", appid);
paramMap.put("timestamp", Long.toString(timestamp));
paramMap.put("signatureMethod", "SHA256");
//业务参数
paramMap.put("vid","1b448be3233659acf35d430ba9210bd4_1");
String sign = VodSignUtil.getSHA256Sign(paramMap, secretkey);
log.debug("生成SHA256签名:{}",sign);
}
}
