80 lines
2.8 KiB
Java
80 lines
2.8 KiB
Java
package com.heyu.api.alibaba;
|
||
|
||
import java.security.MessageDigest;
|
||
import java.security.NoSuchAlgorithmException;
|
||
import java.util.UUID;
|
||
|
||
public class AliyunCDNAuthA {
|
||
|
||
|
||
/**
|
||
* 生成阿里云CDN鉴权方式A的加密URL
|
||
*
|
||
* @param filePath 文件路径,以/开头,如 "/video/test.mp4"
|
||
* @param expiresInSeconds 过期时间(从当前算起的秒数)
|
||
* @return 完整的加密URL
|
||
*/
|
||
public static String generateAuthUrl(String privateKey,String domainName,String filePath, long expiresInSeconds) {
|
||
try {
|
||
// 1. 生成时间戳(当前时间 + 过期时间)
|
||
long timestamp = (System.currentTimeMillis() / 1000) + expiresInSeconds;
|
||
|
||
// 2. 生成随机数(去掉UUID中的短横线)
|
||
String rand = UUID.randomUUID().toString().replace("-", "");
|
||
|
||
// 3. 设置uid为0
|
||
String uid = "0";
|
||
|
||
// 4. 计算md5hash
|
||
String md5hash = calculateMd5Hash(privateKey,filePath, timestamp, rand, uid);
|
||
|
||
// 5. 构建鉴权URL
|
||
return "http://" + domainName + filePath +
|
||
"?auth_key=" + timestamp + "-" + rand + "-" + uid + "-" + md5hash;
|
||
|
||
} catch (Exception e) {
|
||
throw new RuntimeException("生成鉴权URL失败", e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 计算MD5哈希值
|
||
*/
|
||
private static String calculateMd5Hash(String privateKey,String filePath, long timestamp, String rand, String uid)
|
||
throws NoSuchAlgorithmException {
|
||
// 构造签名字符串
|
||
String signString = filePath + "-" + timestamp + "-" + rand + "-" + uid + "-" + privateKey;
|
||
|
||
// 计算MD5
|
||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||
byte[] digest = md.digest(signString.getBytes());
|
||
|
||
// 转换为十六进制字符串
|
||
StringBuilder hexString = new StringBuilder();
|
||
for (byte b : digest) {
|
||
String hex = Integer.toHexString(0xff & b);
|
||
if (hex.length() == 1) {
|
||
hexString.append('0');
|
||
}
|
||
hexString.append(hex);
|
||
}
|
||
|
||
return hexString.toString();
|
||
}
|
||
|
||
/**
|
||
* 使用示例
|
||
*/
|
||
public static void main(String[] args) {
|
||
// 初始化鉴权对象
|
||
String privateKey = "heyuquyixiao123456"; // 替换为你的密钥
|
||
String domainName = "heyuimage.ihzhy.com"; // 替换为你的CDN域名
|
||
|
||
|
||
// 生成鉴权URL,有效时间30分钟(1800秒)
|
||
String filePath = "/ccc.jpeg";
|
||
String authUrl = AliyunCDNAuthA.generateAuthUrl(privateKey,domainName,filePath, 1800);
|
||
|
||
System.out.println("生成的鉴权URL: " + authUrl);
|
||
}
|
||
} |