From 7a7e2406cab312689627606b6ad4ea33cd41fd58 Mon Sep 17 00:00:00 2001 From: carsonxu <459452372@qq.com> Date: Wed, 21 Nov 2018 21:51:12 +0800 Subject: [PATCH] update simple demo --- demo/cos-auth.js | 126 +++++++++++++++++++++++++++++++++++++++++++++ demo/sts-form.html | 27 +++++----- demo/sts-post.html | 50 ++++++++++-------- demo/sts-put.html | 27 +++++----- 4 files changed, 183 insertions(+), 47 deletions(-) create mode 100644 demo/cos-auth.js diff --git a/demo/cos-auth.js b/demo/cos-auth.js new file mode 100644 index 0000000..5e48244 --- /dev/null +++ b/demo/cos-auth.js @@ -0,0 +1,126 @@ +(function () { + 'use strict'; + + /* + CryptoJS v3.1.2 + code.google.com/p/crypto-js + (c) 2009-2013 by Jeff Mott. All rights reserved. + code.google.com/p/crypto-js/wiki/License + */ + var CryptoJS=CryptoJS||function(g,l){var e={},d=e.lib={},m=function(){},k=d.Base={extend:function(a){m.prototype=this;var c=new m;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}}, + p=d.WordArray=k.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=l?c:4*a.length},toString:function(a){return(a||n).stringify(this)},concat:function(a){var c=this.words,q=a.words,f=this.sigBytes;a=a.sigBytes;this.clamp();if(f%4)for(var b=0;b>>2]|=(q[b>>>2]>>>24-8*(b%4)&255)<<24-8*((f+b)%4);else if(65535>>2]=q[b>>>2];else c.push.apply(c,q);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< + 32-8*(c%4);a.length=g.ceil(c/4)},clone:function(){var a=k.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],b=0;b>>2]>>>24-8*(f%4)&255;b.push((d>>>4).toString(16));b.push((d&15).toString(16))}return b.join("")},parse:function(a){for(var c=a.length,b=[],f=0;f>>3]|=parseInt(a.substr(f, + 2),16)<<24-4*(f%8);return new p.init(b,c/2)}},j=b.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],f=0;f>>2]>>>24-8*(f%4)&255));return b.join("")},parse:function(a){for(var c=a.length,b=[],f=0;f>>2]|=(a.charCodeAt(f)&255)<<24-8*(f%4);return new p.init(b,c)}},h=b.Utf8={stringify:function(a){try{return decodeURIComponent(escape(j.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return j.parse(unescape(encodeURIComponent(a)))}}, + r=d.BufferedBlockAlgorithm=k.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=h.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,b=c.words,f=c.sigBytes,d=this.blockSize,e=f/(4*d),e=a?g.ceil(e):g.max((e|0)-this._minBufferSize,0);a=e*d;f=g.min(4*a,f);if(a){for(var k=0;ka;a++){if(16>a)m[a]=d[e+a]|0;else{var c=m[a-3]^m[a-8]^m[a-14]^m[a-16];m[a]=c<<1|c>>>31}c=(n<<5|n>>>27)+l+m[a];c=20>a?c+((j&h|~j&g)+1518500249):40>a?c+((j^h^g)+1859775393):60>a?c+((j&h|j&g|h&g)-1894007588):c+((j^h^ + g)-899497514);l=g;g=h;h=j<<30|j>>>2;j=n;n=c}b[0]=b[0]+n|0;b[1]=b[1]+j|0;b[2]=b[2]+h|0;b[3]=b[3]+g|0;b[4]=b[4]+l|0},_doFinalize:function(){var d=this._data,e=d.words,b=8*this._nDataBytes,g=8*d.sigBytes;e[g>>>5]|=128<<24-g%32;e[(g+64>>>9<<4)+14]=Math.floor(b/4294967296);e[(g+64>>>9<<4)+15]=b;d.sigBytes=4*e.length;this._process();return this._hash},clone:function(){var e=d.clone.call(this);e._hash=this._hash.clone();return e}});g.SHA1=d._createHelper(l);g.HmacSHA1=d._createHmacHelper(l)})(); + (function(){var g=CryptoJS,l=g.enc.Utf8;g.algo.HMAC=g.lib.Base.extend({init:function(e,d){e=this._hasher=new e.init;"string"==typeof d&&(d=l.parse(d));var g=e.blockSize,k=4*g;d.sigBytes>k&&(d=e.finalize(d));d.clamp();for(var p=this._oKey=d.clone(),b=this._iKey=d.clone(),n=p.words,j=b.words,h=0;h b ? 1 : -1); + }); + }; + + var obj2str = function (obj) { + var i, key, val; + var list = []; + var keyList = getObjectKeys(obj); + for (i = 0; i < keyList.length; i++) { + key = keyList[i]; + val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]); + key = key.toLowerCase(); + key = camSafeUrlEncode(key); + val = camSafeUrlEncode(val) || ''; + list.push(key + '=' + val) + } + return list.join('&'); + }; + + // 签名有效起止时间 + var now = parseInt(new Date().getTime() / 1000) - 1; + var exp = now; + if (Expires === undefined) { + exp += 900; // 默认签名过期时间为当前时间 + 900s + } else { + exp += (Expires * 1) || 0; + } + + // 要用到的 Authorization 参数列表 + var qSignAlgorithm = 'sha1'; + var qAk = SecretId; + var qSignTime = now + ';' + exp; + var qKeyTime = now + ';' + exp; + var qHeaderList = getObjectKeys(headers).join(';').toLowerCase(); + var qUrlParamList = getObjectKeys(query).join(';').toLowerCase(); + + // 签名算法说明文档:https://www.qcloud.com/document/product/436/7778 + // 步骤一:计算 SignKey + var signKey = CryptoJS.HmacSHA1(qKeyTime, SecretKey).toString(); + + // 步骤二:构成 FormatString + var formatString = [method, pathname, obj2str(query), obj2str(headers), ''].join('\n'); + + // 步骤三:计算 StringToSign + var stringToSign = ['sha1', qSignTime, CryptoJS.SHA1(formatString).toString(), ''].join('\n'); + + // 步骤四:计算 Signature + var qSignature = CryptoJS.HmacSHA1(stringToSign, signKey).toString(); + + // 步骤五:构造 Authorization + var authorization = [ + 'q-sign-algorithm=' + qSignAlgorithm, + 'q-ak=' + qAk, + 'q-sign-time=' + qSignTime, + 'q-key-time=' + qKeyTime, + 'q-header-list=' + qHeaderList, + 'q-url-param-list=' + qUrlParamList, + 'q-signature=' + qSignature + ].join('&'); + + return authorization; + + }; + + if(typeof module === 'object'){ + module.exports = CryptoJS; + }else{ + window.CosAuth = CosAuth; + } +})(); \ No newline at end of file diff --git a/demo/sts-form.html b/demo/sts-form.html index 2058a44..bd07ea1 100644 --- a/demo/sts-form.html +++ b/demo/sts-form.html @@ -25,6 +25,7 @@

Form 表单简单上传(兼容 IE8)

+ +