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)