国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

七牛云存儲(chǔ)基于時(shí)間戳防盜鏈算法參考實(shí)現(xiàn)

Channe / 2421人閱讀

摘要:基于時(shí)間戳防盜鏈的功能其實(shí)每家的都是支持的。算法說明基于時(shí)間戳的防盜鏈?zhǔn)峭ㄟ^對(duì)時(shí)間有關(guān)的字符串進(jìn)行簽名,將時(shí)間,簽名通過一定的方式傳遞給服務(wù)器作為判定依據(jù),邊緣節(jié)點(diǎn)依據(jù)約定的算法判斷來訪的是否有訪問權(quán)限。

基于時(shí)間戳防盜鏈的功能其實(shí)每家的CDN都是支持的。主要是通過使用約定的加密字符串來對(duì)具有訪問有效期的資源鏈接進(jìn)行一些加密計(jì)算的到一個(gè)sign值,然后訪問外鏈里面帶上這個(gè)sign和截止時(shí)間戳去訪問CDN的節(jié)點(diǎn),CDN的節(jié)點(diǎn)會(huì)用同樣的算法來計(jì)算訪問鏈接是否合法,如果不合法則返回403 Forbidden,否則返回所要訪問的資源。

算法說明

基于時(shí)間戳的防盜鏈?zhǔn)峭ㄟ^對(duì)時(shí)間有關(guān)的字符串進(jìn)行簽名,將時(shí)間,簽名通過一定的方式傳遞給CDN服務(wù)器作為判定依據(jù),CDN邊緣節(jié)點(diǎn)依據(jù)約定的算法判斷來訪的URL是否有訪問權(quán)限。

如果通過,執(zhí)行下一步;如果不通過,響應(yīng) HTTP 狀態(tài)碼 403。如果同時(shí)配置了Referer方式防盜鏈,UserAgent防盜鏈,時(shí)間戳防盜鏈,那么如果有其中一項(xiàng)沒有通過,那么即響應(yīng)403。

簽名參數(shù)

參數(shù) 描述
T URL過期的時(shí)間,把Unix以秒為單位的時(shí)間戳,用16進(jìn)制的小寫字母形式表示。比如 2016-06-30 22:57:42 +0800 CST 對(duì)應(yīng)的時(shí)間戳是 1467298662 ,表示為16進(jìn)制就是 57753366
key 和CDN約定好的加密字符串
path 訪問資源外鏈的PATH部分,比如如果訪問的外鏈?zhǔn)?b>http://if-pbl.qiniudn.com/golang.png?v=1那么其中PATH部分就是/golang.png

簽名算法

待簽名的原始字符串 s=key+path+T

簽名方式 sign=md5(s).to_lower() ,其中to_lower()表示生成的md5字符串用小寫字母表示

簽名參數(shù)傳遞方式

例如原始訪問外鏈?zhǔn)牵?b>http://if-pbl.qiniudn.com/golang.png?v=1
最終形成的訪問外鏈?zhǔn)牵?b>http://if-pbl.qiniudn.com/golang.png?v=1&sign=xxxx&t=xxxx

其中xxxx對(duì)應(yīng)各自的值。

算法參考實(shí)現(xiàn)

package com.qiniulab.cdn;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.codec.binary.Hex;

public class CdnAntiLeech {
    /**
     * 生成資源基于CDN時(shí)間戳防盜鏈的訪問外鏈
     * 
     * @param 資源原始外鏈
     * @param 結(jié)果資源的有效期,單位秒
     * @throws MalformedURLException
     * @throws UnsupportedEncodingException
     * @throws NoSuchAlgorithmException
     */

    public static String getAntiLeechAccessUrlBasedOnTimestamp(String url, String encryptKey, int durationInSeconds)
            throws MalformedURLException, UnsupportedEncodingException, NoSuchAlgorithmException {
        URL urlObj = new URL(url);
        String path = urlObj.getPath();

        long timestampNow = System.currentTimeMillis() / 1000 + durationInSeconds;
        String expireHex = Long.toHexString(timestampNow);

        String toSignStr = String.format("%s%s%s", encryptKey, path, expireHex);
        String signedStr = md5ToLower(toSignStr);

        String signedUrl = null;
        if (urlObj.getQuery() != null) {
            signedUrl = String.format("%s&sign=%s&t=%s", url, signedStr, expireHex);
        } else {
            signedUrl = String.format("%s?sign=%s&t=%s", url, signedStr, expireHex);
        }

        return signedUrl;
    }

    private static String md5ToLower(String src) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("MD5");
        digest.update(src.getBytes("utf-8"));
        byte[] md5Bytes = digest.digest();
        return Hex.encodeHexString(md5Bytes);
    }
}

使用方式

// cdn 配置的基于時(shí)間戳防盜鏈的加密字符串,cdn 配置完成后會(huì)得到
String encryptKey = "";
// 待加密鏈接
String fileKey = "xxxx.pdf";
String encodedFileKey;
try {
    // 考慮到文件名稱會(huì)有中文,所以需要做urlencode
    encodedFileKey = URLEncoder.encode(fileKey, "utf-8");
    String urlToSign = String.format("http://img.abc.com/%s", encodedFileKey);
    // 有效期
    int duration = 3600;

    String signedUrl = CdnAntiLeech.getAntiLeechAccessUrlBasedOnTimestamp(urlToSign, encryptKey, duration);
    System.out.println(signedUrl);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/10952.html

相關(guān)文章

  • 新一代智能視頻云發(fā)展現(xiàn)狀分析:五大要素成關(guān)鍵

    摘要:遠(yuǎn)程醫(yī)療這一概念被提出后,已經(jīng)被廣泛應(yīng)用。但是,如何提高視頻傳輸性能,如何確保家庭基層醫(yī)療機(jī)構(gòu)和戶外應(yīng)急的遠(yuǎn)程醫(yī)療快速接入,是當(dāng)前的遠(yuǎn)程醫(yī)療業(yè)務(wù)系統(tǒng)面臨的主要挑戰(zhàn)。 編者按:近日,Gartner最新發(fā)布了一份《Five Key Essentials for the New Generation of Intelligent Video Cloud》白皮書報(bào)告,報(bào)告中針對(duì)各行業(yè)在視頻應(yīng)用...

    levy9527 評(píng)論0 收藏0
  • 前端解決第三方圖片防盜的辦法 - html referrer 訪問圖片資源403問題

    摘要:具體問題,就是中通過標(biāo)簽引入一個(gè)第三方的圖片地址,報(bào)。解決方案如原網(wǎng)址顯示此圖片來自微信公眾平臺(tái),未經(jīng)允許不得應(yīng)用方法在標(biāo)簽里加這樣存在第三方網(wǎng)站上的圖片,在你的網(wǎng)站上就可以訪問了。 showImg(https://segmentfault.com/img/bVbtK8u?w=436&h=284); 問題 筆者網(wǎng)站的圖片都是上傳到第三方網(wǎng)站上的,比如 簡書、掘金、七牛云上的,但是最近簡...

    xuxueli 評(píng)論0 收藏0
  • 聊聊畢業(yè)設(shè)計(jì)系列 --- 系統(tǒng)實(shí)現(xiàn)

    摘要:七牛云接入本系統(tǒng)的圖片,音視頻是放在七牛云,所以需要接入七牛云。在服務(wù)端通過接口請(qǐng)求來獲取七牛云上傳,客戶端獲取到七牛云,通過不同方案將帶上。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...

    null1145 評(píng)論0 收藏0
  • 聊聊畢業(yè)設(shè)計(jì)系列 --- 系統(tǒng)實(shí)現(xiàn)

    摘要:七牛云接入本系統(tǒng)的圖片,音視頻是放在七牛云,所以需要接入七牛云。在服務(wù)端通過接口請(qǐng)求來獲取七牛云上傳,客戶端獲取到七牛云,通過不同方案將帶上。 效果展示 showImg(https://user-gold-cdn.xitu.io/2018/8/26/16576a709bd02f5f?w=1409&h=521&f=gif&s=30128195); showImg(https://user...

    qpal 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<