目录

腾讯云点播key防盗链生成到期自动失效url

目录

腾讯云点播key防盗链生成到期自动失效url

package com.xmkjsoft.protect_key;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

public class TencentKeyAntiTheft {

    private static final String SECRET_KEY = ""; // 请替换为腾讯云 VOD 控制台中的 Key

    /**
     * 生成腾讯云 Key 防盗链 URL
     * @param url 原始 URL
     * @param t 过期时间戳(Unix 时间戳,需转换为 16 进制)
     * @param exper 试看时间(可选)
     * @param rlimit 限制最大 IP 数(可选)
     * @return 带签名的 URL
     */
    public static String generateSignedUrl(String url, long t, String exper, String rlimit) {
        try {
            // **获取 URL 目录部分(去掉域名,仅保留路径)**
            String path = "/dir1/dir1/";  // 不能包含域名

            // **转换时间戳为 16 进制**
            String hexT = Long.toHexString(t);

            // **生成随机字符串 us**
            String us = "72d4cd1101";

            // **访问控制字段,未启用则留空**
            String whref = "";
            String bkref = "";
            String whreg = "";
            String bkreg = "";

            // **拼接待签名字符串**
            String dataToSign = SECRET_KEY + path + hexT + exper + rlimit + us + whref + bkref + whreg + bkreg;

            // **计算 MD5 签名**
            String sign = md5(dataToSign);

            // **生成最终 URL**
            return url + "?t=" + hexT
                    + "&exper=" + exper
                    + "&rlimit=" + rlimit
                    + "&us=" + us
                    + "&sign=" + sign;
        } catch (Exception e) {
            throw new RuntimeException("生成 Key 防盗链 URL 失败", e);
        }
    }

    /**
     * 计算 MD5 签名(腾讯云要求的格式)
     */
    private static String md5(String data) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] hash = md.digest(data.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (Exception e) {
            throw new RuntimeException("MD5 计算失败", e);
        }
    }

    public static void main(String[] args) {
        String originalUrl = "https://*******.com/dir1/dir2/v.f100230.m3u8";
        long expires = System.currentTimeMillis() / 1000 + 3600; // 1 小时后过期

        // 生成 Key 防盗链 URL(不启用试看,IP 限制)
        String signedUrl = generateSignedUrl(originalUrl, expires, "", "");
        System.out.println("✅ 腾讯 Key 防盗链 URL: " + signedUrl);
    }
}

注意里面的/dir1/dir2/  是域名后面的地址名称   那个是啥视频文件格式,详情看云点播API:key防盗链文档:https://cloud.tencent.com/document/product/266/14047