ANGULARJS Custom Services (implementing signing and encryption)

Source: Internet
Author: User
Tags rfc sha1 sha1 encryption

Write in front:

  

ANGULARJS is Google's main push of the JS development Excellent framework ...

Page Show:

Encryption is ubiquitous in the application, and personal advice is to implement cryptographic signatures at the front end (whether the front-end encryption is necessary from the Knowledge : http://www.zhihu.com/question/25539382)

  

Simple explanation of Base64, MD5, SHA1 encryption algorithm:

1, base64 is a reversible, symmetric encryption algorithm; Base64 basic character set with 64 basic characters

Base64 Encryption Principle:

A, base64 is set in 3 bytes, and one byte is 8 bits (bit)

b, then the 24bit is divided into four groups, each group of 6bit

C, again in each group of high two bit 00, expanded to 32bit, forming four bytes

2, MD5 signature is an irreversible message digest algorithm, that is, can not be decrypted (from ciphertext to plaintext) (please refer to Baidu: http://baike.baidu.com/view/7636.htm) MD5 will produce a 128-bit message digest

A, fill: the first need to fill the information, so that its bit length of 512 to find the result of the remainder equals 448;

b, initialize the variable: the initial 128-bit value is the first-link variable, these parameters are used in the operation of the primary round, in the big-endian byte sequence to represent, they are: a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210

C. Processing grouped data

D, output: Outputs are cascaded for a, B, C, and D

3, SHA1 signature is irreversible digital Signature Algorithm (please refer to Baidu: http://baike.baidu.com/view/1228622.htm) SHA1 will produce a 160-bit message digest

A, fill: the first need to fill the information, so that its bit length of 512 to find the result of the remainder equals 448;

b, complement length: the so-called complement length is the length of the original data to the completion of the operation has been done after the message.

C. Constants Used

D. Functions used: In SHA1 We need a series of functions. Each function ft (0 <= T <= 79) operates 32-bit b,c,d and produces 32-bit words as output

E, Calculate message digest: The message digest must be computed using a message with the complement and the length of the complement.

Login Control Module:

  

Service module:

  

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 *//** * method for external invocation */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 Paddi  ng */X[len >> 5] |= 0x80 << (len)% 32);  X[((len + >>> 9) << 4) + +] = len;  var a = 1732584193;  var b =-271733879;  var c =-1732584194;  var d = 271733878;    for (var i = 0; i < x.length; i + = +) {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 Encodingthis.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 &) << 2) | (CHR3 >> 6); Enc4 = Chr3 & 63;if (IsNaN (CHR2)) {enc3 = Enc4 =;} 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 < +) {Utftext + = String.fromCharCode (c);} else if ((C > 127) && (c < 2048)) {Utftext + = String.fromCharCode ((c >> 6) | 192); Utftext + = String.fromCharCode ((c & N) |);} EL Se {utftext + = String.fromCharCode ((c >> N) | 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        *//* * method for external invocation */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 + >> 9) << 4) + [] = 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 + = +) {var Olda = A;        var oldb = b;        var oldc = c;        var oldd = D;        var olde = e;            for (var j = 0; J <; J + +) {if (J < i) 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);})

  

File structure:

  

Learning and communication:

If there is a mistake, please treatise, application please indicate the source ...

Note: There are 3 types of custom services in Angularjs: Factory,provider,service; Please select a service delivery method based on your project's actual needs

ANGULARJS Custom Services (implementing signing and encryption)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.