递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1138|回复: 0
打印 上一主题 下一主题

[安卓] 123直链鉴权 算法

[复制链接]

94

主题

396

帖子

2056

积分

金牌会员

Rank: 6Rank: 6

积分
2056
跳转到指定楼层
楼主
发表于 2023-11-2 10:26:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ゞ情非得已Sky 于 2023-11-2 10:48 编辑

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

https://gitee.com/pan123-git/123 ... r/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();

    }
}


654308827943e.png (44.06 KB, 下载次数: 1)

654308827943e.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-6-18 08:33 , Processed in 0.092617 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表