CDN a,b,c三种鉴权的PHP代码

A鉴权方式的代码

//http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash

//sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI是用户的请求对象相对地址, 如 /Filename)

//HashValue = md5sum(sstring)

function PrivateKeyA(){

$time=strtotime("+8 hours");

$key="youkey";

$domain="http://www.a.com";

$filename="/mulu/1.jpg";

//$sstring = "URI-Timestamp-rand-uid-PrivateKey"

$sstring = $filename."-".$time."-0-0-".$key;

$md5=md5($sstring);

$auth_key="auth_key=".$time."-0-0-".$md5;

$url=$domain.$filename."?".$auth_key;

echo $url."\n";

}

B鉴权方式的代码

//http://DomainName/timestamp/md5hash/FileName

//timestamp:用户访问时客户源服务器的时间,作为URL的一部分,同时作为计算 md5hash 的一个因子,格式为: YYYYMMDDHHMM ,有效时间1800s

//md5hash:以timestamp、FileName和预先设定好的 PrivateKey 共同做MD5获得的字符串,即 md5(PrivateKey + timestamp + FileName)

function PrivateKeyB(){

$time=date("YmdHi");

$key="youkey";

$domain="http://www.a.com/";

$filename="/mulu/1.jpg";

//$sstring = "PrivateKeytimestampFileName"

$sstring = $key.$time.$filename;

$md5=md5($sstring);

$url=$domain.$time."/".$md5.$filename;

echo $url."\n";

}

C鉴权方式的代码:

//http://DomainName/{/}/FileName

//md5hash = md5sum()

//time: 用户访问源服务器时间,取 UNIX 时间,以十六进制数字字符表示。

function PrivateKeyC(){

$time2=dechex(time());

$key="youkey";

$domain="http://ww.a.com/";

$filename="/mulu/1.jpg";

//$sstring=PrivateKeyFileNametime

$sstring=$key.$filename.$time2;

$md5=md5($sstring);

$url=$domain.$md5."/".$time2.$filename;

echo $url."\n";

}

鉴权错误都是返回 403

Md5计算类错误:

X-Tengine-Error:denied by req auth: invalid md5hash=de7bfdc915ced05e17380a149bd760be

时间类报错:

X-Tengine-Error:denied by req auth: expired timestamp=1439469547

时间: 2024-10-14 10:45:46

CDN a,b,c三种鉴权的PHP代码的相关文章

AutoLayout的三种设置方式之——NSLayoutConstraint代码篇

AutoLayout是从IOS 6开始苹果引入来取代autoresizing的新的布局技术,该技术有三种设置方式,等下我来为大家一一叙述一下. 在说三种设置方式前,我们先简单的说一下autolayout能够设置哪些行为. 1.视图的大小(即视图的绝对大小). 2.视图的位置(视图相对于父视图或者兄弟视图的位置). 3.视图的对齐方式(相对于父视图或者相对于兄弟视图). 可以看到autolayout相比autoresizing技术来说要灵活的多,该技术有很多布局的约束设置.这次主要讲的用代码来设置

鼠标移到图片变化的三种写法(可移植性强、代码少)

当鼠标移动到某个图片的时候,图片变化.当鼠标移出去的时候,图片变回来.下面是三种写法:第一种,也是最笨,最麻烦的写法,如下: 1 $(".web-footer2 .inner").each(function(){ 2 $(this).find("ul").eq(1).find("img").eq(0).hover(function(){ 3 $(this).attr("src","/img/footer-qq2.pn

iOS中图片动画的三种模式及基本的代码实现

-(void)play { //第一种图片动画模式 头尾方式 //头尾方式 [UIView beginAnimations:nil context:nil];//动画开始 [UIView setAnimationDuration:10];//设置动画播放时长 /*内部写图片处理*/ [UIView commitAnimations];//提交动画 //第二种方式:图片动画结束处理模式 [UIView animateWithDuration:10 animations:^{ /*图片处理操作*/

Java的三种代理模式简述

本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class Singer{ 2 public void sing(){ 3 System.out.println("唱一首歌"); 4 } 5 } 假如你希望,通过你的某种

C++模板源代码的三种组织方式

模板代码和非模板代码是有区别的,如果像非模板代码那样把模板的声明放在头文件.h中,把模板的定义放在源文件.cpp中,那么使用这个模板时会得到一个链接错误.这个错误的原因在于,模板的定义还没有被实例化.为了实例化一个模板,编译器必须知道哪一个定义应该被实例化以及使用什么样的模板参数来实例化. 我们可以用以下三种方式来组织模板代码: 1. 包含模型(Inclusion Modal) a. 把模板的定义包含进声明模板的头文件中,如果模板声明在头文件tmpl.h中,定义在tmpl.cpp中,那可以将#i

Android中WebView的JavaScript代码和本地代码交互的三种方式

一.Android中WebView的漏洞分析 最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 第一.漏洞产生的原因 这个漏洞导致的原因主要是因为Android中WebView中的JS访问本地方法的方式存在缺陷,我们做过交互的都知

codevs 2924 数独挑战 x(三种做法+超详细注释~)

2924 数独挑战 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题目描述 Description “芬兰数学家因卡拉,花费3个月时间设计出了世界上迄今难度最大的数独游戏,而且它只有一个答案.因卡拉说只有思考能力最快.头脑最聪明的人才能破解这个游戏.”这是英国<每日邮报>2012年6月30日的一篇报道.这个号称“世界最难数独”的“超级游戏”,却被扬州一位69岁的农民花三天时间解了出来. 看到这个新闻后,我激动不已,证明我们OI的实力的机会来了,我们虽然不是

创建二叉树的两种方法以及三种遍历方法

二叉树的两种创建方法和三种遍历方法 这里的两种创建方法,一种值得是 数据结构上面的创建方法: 方法一 代码如下: 二叉树的结构定义如下: typedef struct BinaryTreeNode{ char value; struct BinaryTreeNode *left; struct BinaryTreeNode *right; }; - c语言版 void CreateBinaryTree(BinaryTreeNode **T) { char data; scanf("%d"

设计模式看书笔记(5) - 三种工厂模式比较

先看三种工厂模式部分主要代码(完整代码在前三篇博客): 简单工厂模式: public class SampleFactory { public static Animal createAnimal(String animalName){ if("Tiger".equals(animalName))){ return new Triger(); }else if("Dolphin".equals(animalName)){ return new Dolphin();