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]