ゞ情非得已Sky 发表于 2023-11-2 10:26:27

123直链鉴权 算法

本帖最后由 ゞ情非得已Sky 于 2023-11-2 10:48 编辑

官方文档
https://www.123pan.com/faq?problem=dev_guide
官方算法开源地址

https://gitee.com/pan123-git/123pan-link/blob/master/example/sign.java




<火山程序 类型 = "通常" 版本 = 1 />

类 鉴权123算法 <公开
      @java.导入 = "java.net.URL\njava.security.MessageDigest\njava.security.NoSuchAlgorithmException\njava.util.Date\njava.util.UUID\njava.lang.String"
      @全局类 = 真>
{
    方法 直连_DirectLink <公开 静态 类型 = 文本型 返回值注释 = "返回下载地址" 折叠 @禁止流程检查 = 真>
    参数 密钥 <类型 = 文本型 注释 = "123云盘中设置的密钥">
    参数 UID <类型 = 长整数 注释 = "123云盘用户UID">
    参数 有效期 <类型 = 长整数 注释 = "防盗链过期时间间隔(秒)">
    参数 原始URL <类型 = 文本型>
    参数 文件路径 <类型 = 文本型>
    {
      // 下载链接的过期时间戳(秒)
      @ long timestamp = new Date().getTime() / 1000 + @<有效期>;//单位秒
      // 生成随机数(建议使用UUID,不能包含中划线(-))
      @ String randomUUID = UUID.randomUUID().toString().replaceAll("-", "");
      // 待签名字符串="URI-timestamp-rand-uid-PrivateKey" (注:URI是用户的请求对象相对地址,不包含参数)
      @ String unsignedStr = String.format("%s-%d-%s-%d-%s",@<文件路径>, timestamp, randomUUID, @<UID>, @<密钥>);
      变量 unsignedStr2 <类型 = 文本型>
      @ @<unsignedStr2>=unsignedStr;
      unsignedStr2 = MD5加密 (unsignedStr2)
      @ return @<原始URL> + "?auth_key=" + String.format("%d-%s-%d-", timestamp, randomUUID, @<UID>) + @<unsignedStr2>;
    }

    方法 MD5加密 <静态 类型 = 文本型 返回值注释 = "成功返回MD5否则返回空" 折叠 @禁止流程检查 = 真>
    参数 unsignedStr <类型 = 文本型 注释 = "无符号字符串">
    {
      开始俘获异常 ()
      {
            @ MessageDigest md5 = MessageDigest.getInstance("MD5");
            @ byte[] secretBytes = md5.digest(@<unsignedStr>.getBytes());
            变量 byte2 <类型 = "字节 []">
            @ @<byte2>=secretBytes;
            返回 (bytesToHex (byte2))
      }
      俘获所有异常 ()
      返回 ("")
    }

    方法 bytesToHex <静态 类型 = 文本型 注释 = "二进制转为十六进制字符串" 返回值注释 = "返回 md5字符串" 折叠 @禁止流程检查 = 真>
    参数 bytes <类型 = "字节 []">
    {
      @ StringBuilder md5str = new StringBuilder();
      // 把数组每一字节换成16进制连成md5字符串
      @ int digital;
      @ for (byte aByte : @<bytes>) {
      @ digital = aByte;
      @ if (digital < 0) {
      @ digital += 256;
      @ }
      @ if (digital < 16) {
      @ md5str.append("0");
      @ }
      @ md5str.append(Integer.toHexString(digital));
      @ }
      @ return md5str.toString().toLowerCase();

    }
}


页: [1]
查看完整版本: 123直链鉴权 算法