基于1.8 、springboot
金山云官方文档 请求签名-文档中心-金山云
可视化工具,可对比签名KS3可视化签名工具-文档中心-金山云
@Api("1.0.0")
@PostMapping(value = "/p/k3/getSignV2")
public String getK3SignV2(
@NotNull(message = "HTTPVerb不能为空") String HTTPVerb,
@NotNull(message = "ContentMD5不能为空") String ContentMD5,
@NotNull(message = "ContentType不能为空") String ContentType,
@NotNull(message = "date不能为空") String date,
@NotNull(message = "CanonicalizedKssHeaders不能为空") String CanonicalizedKssHeaders,
@NotNull(message = "CanonicalizedResource不能为空") String CanonicalizedResource
) throws UnsupportedEncodingException {
HTTPVerb = HTTPVerb + "\n";
ContentMD5 = ContentMD5 + "\n";
ContentType = ContentType + "\n";
date = date + "\n";
if (!CanonicalizedKssHeaders.isEmpty()) {
CanonicalizedKssHeaders = CanonicalizedKssHeaders + "\n";
}
String StringToSign = HTTPVerb + ContentMD5 + ContentType + date + CanonicalizedKssHeaders + CanonicalizedResource;
logger.info("HTTPVerb:" + HTTPVerb);
logger.info("ContentMD5:" + ContentMD5);
logger.info("ContentType:" + ContentType);
logger.info("date:" + date);
logger.info("CanonicalizedKssHeaders:" + CanonicalizedKssHeaders);
logger.info("CanonicalizedResource:" + CanonicalizedResource);
String fieldvalue_utf8 = new String(StringToSign.getBytes("ISO-8859-1"), "UTF-8");
String Signature = Base64.getEncoder().encodeToString(genHMAC(fieldvalue_utf8, ks3VideoSk));
String Authorization = "KSS " + ks3VideoAk + ":" + Signature;
return ResultBody.success(Authorization).toString();
}
public static byte[] genHMAC(String data, String key) {
byte[] result = null;
try {
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKeySpec signinKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
//用给定密钥初始化 Mac 对象
mac.init(signinKey);
//完成 Mac 操作
byte[] rawHmac = mac.doFinal(data.getBytes());
//result = Base64.encodeBase64(rawHmac);
result = rawHmac;
} catch (NoSuchAlgorithmException e) {
System.err.println(e.getMessage());
} catch (InvalidKeyException e) {
System.err.println(e.getMessage());
}
if (null != result) {
return result;
} else {
return null;
}
}