最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密

 更新時(shí)間:2016年08月02日 09:23:35   作者:maikec陳  
AngularJS 是一個(gè) JavaScript 框架,它可以通過(guò) <script> 標(biāo)簽添加到 HTML 頁(yè)面。這篇文章主要介紹了AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密的相關(guān)資料,需要的朋友可以參考下

寫(xiě)在前面:

AngularJS 是一個(gè) JavaScript 框架。它可通過(guò) <script> 標(biāo)簽添加到 HTML 頁(yè)面。

AngularJS 通過(guò) 指令 擴(kuò)展了 HTML,且通過(guò) 表達(dá)式 綁定數(shù)據(jù)到 HTML。

  angularJS是google公司主推的js開(kāi)發(fā)優(yōu)秀框架...

頁(yè)面展示:

在應(yīng)用中進(jìn)行加密是普遍存在的,個(gè)人建議在前端實(shí)現(xiàn)加密簽名(前端加密是否必要來(lái)自知乎:http://www.zhihu.com/question/25539382

對(duì)base64、md5、sha1加密算法簡(jiǎn)單解釋?zhuān)?br />

1、base64是可逆的、對(duì)稱(chēng)的加密算法;base64具有64個(gè)基本字符組成的基本字符集

base64加密原理:

  a、base64以3個(gè)字節(jié)為一組,而一個(gè)字節(jié)占8個(gè)位(bit)

  b、再把24bit分為四組,每組6bit

  c、再在每組高二位補(bǔ)00,擴(kuò)展為32bit,形成四個(gè)字節(jié)

2、md5簽名是不可逆的消息摘要算法;即不能被解密(從密文到明文)(請(qǐng)參考百度:http://baike.baidu.com/view/7636.htm)MD5會(huì)產(chǎn)生一個(gè)128位消息摘要

  a、填充:首先需要對(duì)信息進(jìn)行填充,使其位長(zhǎng)對(duì)512求余的結(jié)果等于448;

  b、初始化變量:初始的128位值為初試鏈接變量,這些參數(shù)用于第一輪的運(yùn)算,以大端字節(jié)序來(lái)表示,他們分別為: A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210

  c、處理分組數(shù)據(jù)

  d、輸出:輸出是a、b、c和d的級(jí)聯(lián)

3、sha1簽名是不可逆的數(shù)字簽名算法(請(qǐng)參考百度:http://baike.baidu.com/view/1228622.htm)SHA1會(huì)產(chǎn)生一個(gè)160位的消息摘要

  a、填充:首先需要對(duì)信息進(jìn)行填充,使其位長(zhǎng)對(duì)512求余的結(jié)果等于448;

  b、補(bǔ)長(zhǎng)度:所謂的補(bǔ)長(zhǎng)度是將原始數(shù)據(jù)的長(zhǎng)度補(bǔ)到已經(jīng)進(jìn)行了補(bǔ)位操作的消息后面。

  c、使用的常量

  d、使用的函數(shù):在SHA1中我們需要一系列的函數(shù)。每個(gè)函數(shù)ft (0 <= t <= 79)都操作32位字B,C,D并且產(chǎn)生32位字作為輸出

  e、計(jì)算消息摘要:必須使用進(jìn)行了補(bǔ)位和補(bǔ)長(zhǎng)度后的消息來(lái)計(jì)算消息摘要。

登錄控制模塊:

服務(wù)模塊:

var encryption = angular.module('Encryption', []);
encryption.service('Md5', function(){
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/**
* 供外部調(diào)用的方法
*/
this.hex_md5 = function(s) { 
return binl2hex(core_md5(str2binl(s), s.length * chrsz));
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length
*/
function core_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
}).
service('Base64', function(){
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// public method for encoding
this.encode = function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = _utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
_keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;
}
// private method for UTF-8 encoding
_utf8_encode = function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
} else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
} else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
}).
service('Sha1', function(){
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/* 
* 供外部調(diào)用的方法 
*/
this.hex_sha1 = function (s) {
return binb2hex(core_sha1(str2binb(s), s.length * chrsz));
}
/* 
* Calculate the SHA-1 of an array of big-endian words, and a bit length 
*/
function core_sha1(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << (24 - len % 32);
x[((len + 64 >> 9) << 4) + 15] = len;
var w = Array(80);
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
var e = -1009589776;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
var olde = e;
for (var j = 0; j < 80; j++) {
if (j < 16) w[j] = x[i + j];
else w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));
e = d;
d = c;
c = rol(b, 30);
b = a;
a = t;
}
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
e = safe_add(e, olde);
}
return Array(a, b, c, d, e);
} 
}) 

文件結(jié)構(gòu):

以上所述是小編給大家介紹的AngularJs自定義服務(wù)之實(shí)現(xiàn)簽名和加密,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Angular2內(nèi)置指令NgFor和NgIf詳解

    Angular2內(nèi)置指令NgFor和NgIf詳解

    Directive的概念在Angular 1.x就存在了,我對(duì)它的認(rèn)識(shí)比較模糊,所以直接通過(guò)一些例子來(lái)說(shuō)明。Angular提供的內(nèi)置執(zhí)行有很多,這次使用兩個(gè):ngFor、ngIf。
    2016-08-08
  • Angular2使用SVG自定義圖表(條形圖、折線(xiàn)圖)組件示例

    Angular2使用SVG自定義圖表(條形圖、折線(xiàn)圖)組件示例

    這篇文章主要介紹了Angular2使用SVG自定義圖表(條形圖、折線(xiàn)圖)組件,涉及Angular結(jié)合svg進(jìn)行圖表繪制的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • 淺談Angular的$q, defer, promise

    淺談Angular的$q, defer, promise

    本文主要對(duì)Angular的 $q, defer, promise進(jìn)行實(shí)例分析介紹。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • AngularJS 模型詳細(xì)介紹及實(shí)例代碼

    AngularJS 模型詳細(xì)介紹及實(shí)例代碼

    本文主要介紹 AngularJS模型,這里詳細(xì)介紹了AngularJS 模型中的知識(shí)點(diǎn),并提供實(shí)例代碼,有需要的小伙伴可以參考下
    2016-07-07
  • Angular2數(shù)據(jù)綁定詳解

    Angular2數(shù)據(jù)綁定詳解

    本篇文章主要介紹了Angular2數(shù)據(jù)綁定的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • AngularJS中的表單簡(jiǎn)單入門(mén)

    AngularJS中的表單簡(jiǎn)單入門(mén)

    本文主要介紹AngularJS 表單,這里對(duì)AngularJS 表單知識(shí)做了詳細(xì)整理介紹,希望能幫助有需要的小伙伴
    2016-07-07
  • AngularJS 路由詳解和簡(jiǎn)單實(shí)例

    AngularJS 路由詳解和簡(jiǎn)單實(shí)例

    本文主要介紹AngularJS 路由,這里整理了相關(guān)資料進(jìn)行詳細(xì)介紹,并附實(shí)例代碼和實(shí)現(xiàn)效果圖,有需要的小伙伴可以參考下
    2016-07-07
  • AngularJS常見(jiàn)過(guò)濾器用法實(shí)例總結(jié)

    AngularJS常見(jiàn)過(guò)濾器用法實(shí)例總結(jié)

    這篇文章主要介紹了AngularJS常見(jiàn)過(guò)濾器用法,結(jié)合實(shí)例形式總結(jié)分析了AngularJS大小寫(xiě)過(guò)濾器、貨幣過(guò)濾器、日期過(guò)濾器、limitTo過(guò)濾器、orderBy過(guò)濾器及自定義過(guò)濾器使用方法,需要的朋友可以參考下
    2017-07-07
  • 簡(jiǎn)述AngularJS的控制器的使用

    簡(jiǎn)述AngularJS的控制器的使用

    這篇文章主要介紹了AngularJS的控制器的使用,文中給出了具體的用于HTML中的對(duì)象示例,需要的朋友可以參考下
    2015-06-06
  • Angular 的 Change Detection機(jī)制實(shí)現(xiàn)詳解

    Angular 的 Change Detection機(jī)制實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Angular 的 Change Detection機(jī)制實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

承德县| 察雅县| 米泉市| 瓦房店市| 武功县| 竹山县| 阜南县| 平顶山市| 阜平县| 康乐县| 保山市| 长白| 紫阳县| 承德市| 鄄城县| 肥西县| 肃北| 礼泉县| 明水县| 屏东市| 锦屏县| 佳木斯市| 宿松县| 通海县| 昭觉县| 通榆县| 北流市| 泰来县| 神农架林区| 凉城县| 普定县| 和顺县| 南京市| 沙洋县| 阿瓦提县| 临洮县| 陵川县| 晋州市| 深州市| 克什克腾旗| 尉氏县|