この記事では、JSによって実装されたBase64暗号化、MD5暗号化、SHA1暗号化について説明します。次のように、参照のために共有してください。
1。Base64暗号化
base64.jsファイルをページに導入すると、コールメソッドは次のとおりです。
<!doctype html> <html> <head> <meta charset = "utf-8"> <title64暗号化</title64 script> <script = "text/javascript" src = "base64.js"> </script> <script type = "text/javascript"> var b = new base64(); var str = b.encode( "admin:admin"); alert( "base64エンコード:" + str); // decrypt str = b.decode(str); alert( "base64デコード:" + str); </script> </head> <body> </body> </html>
2。MD5暗号化
ページのmd5.jsファイルを参照してください。呼び出し方法は
<!doctype html> <html> <head> <meta charset = "utf-8"> <title> md5暗号化</title> <script> <script "src =" md5.js "> </script> <script type =" text/javascript "> var hash = hex_md5(123dafd");アラート(ハッシュ)</script> </head> <body> </body> </html>
3。SHA1暗号化
これは最も安全な暗号化であると言われています
このページにはsha1.jsが導入され、コールメソッドが紹介されています
<!Doctype html> <html> <head> <meta charset = "utf-8"> <title> sha1暗号化</title> <script> <script = "src =" sha1.js "> </script> <script type =" text/javascript "> var sha = hex_sha1( 'mima12345' 'アラート(sha)</script> </head> <body> </body> </html>
JSのソースコードは次のとおりです
base64.js:
/**** base64 encode /decode ** @author haitao.tu*@date 2010-04-26*@email [email protected]./function base64(){// private property _keystr = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/="; // 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; } // this.decode = function(input){var output = ""; VAR CHR1、CHR2、CHR3; var enc1、enc2、enc3、enc4; var i = 0; input = input.replace(/[^a-za-z0-9/+//// =]/g、 ""); while(i <input.length){enc1 = _keystr.indexof(input.charat(i ++)); enc2 = _keystr.indexof(input.charat(i ++)); enc3 = _keystr.indexof(input.charat(i ++)); enc4 = _keystr.indexof(input.charat(i ++)); chr1 =(enc1 << 2)| (enc2 >> 4); chr2 =((enc2&15)<< 4)| (enc3 >> 2); chr3 =((enc3&3)<< 6)| enc4; output = output + string.fromCharcode(chr1); if(enc3!= 64){output = output + string.fromCharcode(chr2); } if(enc4!= 64){output = output + string.fromCharcode(chr3); }} output = _utf8_decode(output);返品出力; } // utf-8エンコードのプライベートメソッド_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); }} utftextを返します。 } // utf-8デコード_utf8_decode = function(utftext){var string = ""; var i = 0; var c = c1 = c2 = 0; while(i <utftext.length){c = utftext.charcodeat(i); if(c <128){string += string.fromCharcode(c); i ++; } else if((c> 191)&&(c <224)){c2 = utftext.charcodeat(i+1); string += string.fromCharcode(((c&31)<< 6)|(c2&63)); I += 2; } else {c2 = utftext.charcodeat(i+1); c3 = utftext.charcodeat(i+2); string += string.fromCharcode(((c&15)<< 12)|(((c2&63)<< 6)|(c3&63)); i += 3; }} return string; }}
md5.js:
/ * * RSA Data Security、Inc。Md5 Message * Digest Algorithm、RFC 1321で定義されているJavaScript実装。 http://pajhome.org.uk/crypt/md5詳細については。 * // * *設定可能な変数。これらを微調整する必要がある場合があります *サーバー側と互換性がありますが、ほとんどの場合、デフォルトは機能します。 */var hexcase = 0; /* hex出力形式。 0-小文字; 1 -大文字 */var b64pad = ""; /*ベース64パッド文字。 "="厳密なRFCコンプライアンスの場合 */var chrsz = 8; /*入力文字ごとにビット。 8 -ASCII; 16 -Unicode * // * *これらは通常、呼び出したい関数です *文字列引数を取得し、hexまたはbase -64エンコード文字列 */function hex_md5(s){return binl2hex(core_md5(str2binl(s)、s.length * chrsz);}関数B64_md5(s){ binl2b64(core_md5(str2binl(s)、s.length * chrsz));} function str_md5(s){return binl2str(str2binl(s)、s.length * chrz);} function function hex_hmac_md5(key _md5h(core_hx(co」) データ)); } function b64_hmac_md5(key、data){return binl2b64(core_hmac_md5(key、data)); } function str_hmac_md5(key、data)); } function str_hmac_md5(key、data){return binl2str(core_hmac_md5(key、data)); }/ * *簡単なセルフテストを実行して、VMが動作しているかどうかを確認します */function md5_vm_test(){return hex_md5( "abc")== "900150983cd24fb0d6963f7d28e17f72";} core_md5(x、len){ / *パディングを追加 * / 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 old = a; var oldb = b; var oldc = c; var old = 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+ 1]、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、d、x [i+ 5]、5、-701558691); d = md5_gg(d、a、b、c、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_gg(b、c、d、a、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 = md5hh(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 = md5hh(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 = md5hh(b、c、d、a、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 0]、11、-358537222); c = md5_hh(c、d、a、b、x [i+ 3]、16、-722521979); b = md5hh(b、c、d、a、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 6]、23、76029189); a = md5_hh(a、b、c、d、x [i+ 6]、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、-34348551); 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);}/ * *これらの関数は、アルゴリズムが使用する4つの基本操作を実装します。 */function md5_cmn(q、a、b、x、s、t){return safe_add(safe_add(safe_add(a、q)、safe_add(x、t))、b)、b);} function md5_ff(a、b、c、d、x、x、s、t){b c) &d)、a、b、x、s、t);} function md5_gg(a、b、c、d、x、s、t){(b&d)|(c&(〜d))、a、b、x、s、t);} function md5_hh(a、b、c、x、x、x、s、t){c、s、t) b、x、s、t);}関数md5_ii(a、b、c、d、x、s、t){return md5_cmn(c ^(〜d))、a、b、x、s、t);}/ * * hmac-md5を計算します。 str2binl(key.length> 16) 0x5C5C5C; */var lsw =(x&0xfff) +(x >> 16) +(lsw >> 16); num << cnt)|(32 -cnt); * chrsz)bin [i >> 5] | =(i/chrsz)<<(i%32)/ * * bin.length * 32; "0123456789ABCDEF": "0123456789ABCDEF" "; hex_tab.charat(binarray [i >> 2] >>((i%4) * 8)&0xf); 「abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 +/」 0xff)<< 16)| str += b64pad;sha1.js:
/ * * FIPS PUB 180-1 *バージョン2.1-BETA PAUL JOHNSTON 2002で定義されている安全なハッシュアルゴリズムであるSHA-1のJavaScript実装SHA-1。詳細については、http://pajhome.org.uk/crypt/md5。 * // * *設定可能な変数。これらを微調整する必要がある場合があります *サーバー側と互換性がありますが、ほとんどの場合、デフォルトは機能します。 */var hexcase = 0; /* hex出力形式。 0-小文字; 1 -大文字 */var b64pad = ""; /*ベース64パッド文字。 "="厳密なRFCコンプライアンスの場合 */var chrsz = 8; /*入力文字ごとにビット。 8 -ASCII; 16 -unicode * // * *これらは通常、呼び出したい関数です *文字列引数を取り、hexまたはbase -64エンコード文字列 */function hex_sha1(s){return binb2hex(core_shab(str2binb(s)、s.length * chrsz);}関数B64_sha1(s){ binb2b64(core_sha1(str2binb(s)、s.length * chrsz));} function str_sha1(s){return binb2str(str2binb(s)、s.length * chrsz));} function function hex_hmac_sha1(key data)データ);}関数B64_HMAC_SHA1(key、data){return binb2b64(core_hmac_sha1(key、data));} function str_hmac_sha1(key、data));} function str_hmac_sha1(key、key、key){return binb2str(core_hmac_sha1 VMが動作しているかどうかを確認する簡単なセルフテスト */function sha1_vm_test(){return hex_sha1( "abc")== "a9993e364706816aba3e25717850c26c9cd0d89d";} core_sha1(x、len){ / *パディングを追加 * / 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 old = a; var oldb = b; var oldc = c; var old = d; var old = 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、old); e = safe_add(e、old); } return array(a、b、c、d、e);}/ * *現在の *反復 */function sha1_ft(t、b、c、d){if(t <20)return(b&c)| ((〜b)&d); if(t <40)b ^ c ^ dを返します。 if(t <60)return(b&c)| (B&D)| (CD); return b ^ c ^ d;}/ * *現在のイテレーションの適切な追加定数を決定します */function sha1_kt(t){return(t <20)? 1518500249:(t <40)? 1859775393 :( t <60)? -1894007588:-899497514;}/ * *キーといくつかのデータのhmac -sha1を計算します */function core_hmac_sha1(key、data){var bkey = str2binb(key); if(bkey.length> 16)bkey = core_sha1(bkey、key.length * chrsz); var ipad = array(16)、opad = array(16); for(var i = 0; i <16; i ++){iPad [i] = bkey [i] ^ 0x36363636; opad [i] = bkey [i] ^ 0x5c5c5c5c; } var hash = core_sha1(ipad.concat(str2binb(data))、512 + data.length * chrsz); return core_sha1(opad.concat(hash)、512 + 160);}/ * *整数を追加し、2^32でラッピングします。これは、16ビット操作を内部的に使用して、一部のJS通訳者のバグを回避します。 */function safe_add(x、y){var lsw =(x&0xffff) +(y&0xffff); var msw =(x >> 16) +(y >> 16) +(lsw >> 16); return(msw << 16)| (lsw&0xffff);}/ * *左に32ビット数をビットワイズします。 */function rol(num、cnt){return(num << cnt)| (num >>>(32-cnt));}/ * * 8ビットまたは16ビットの文字列を8ビット関数で大量の単語の配列に変換します。 */function str2binb(str){var bin = array(); var mask =(1 << chrsz)-1; for(var i = 0; i <str.length * chrsz; i += chrsz)bin [i >> 5] | =(str.charcodeat(i / chrsz)&mask)<<(24 -i%32); return bin;}/ * * big-endian単語の配列を文字列に変換 */function binb2str(bin){var str = ""; var mask =(1 << chrsz)-1; for(var i = 0; i <bin.length * 32; i += chrsz)str += string.fromCharcode((bin [i >> 5] >>>(24 -i%32))&マスク); return str;}/ * *ビッグエンディアンの単語の配列を16進ストリングに変換します。 */function binb2hex(binarray){var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF"; var str = ""; for(var i = 0; i <binarray.length * 4; i ++){str += hex_tab.charat((binarray [i >> 2] >>((3-i%4) * 8 +4)&0xf) +hex_tab.charat((binarray [i >> 2] >>((3 -i%4) * 8); } return str;}/ * *ビッグエンディアンの単語の配列をベース64文字列に変換します */function binb2b64(binarray){var tab = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01233436789+" var str = ""; for(var i = 0; i <binary.length * 4; i += 3){var triplet =((((i >> 2] >> 8 *(3 -i%4)&0xff)<< 16)| (((binarray [i + 1 >> 2] >> 8 *(3-(i + 1)%4)&0xff)<< 8)| ((binarray [i + 2 >> 2] >> 8 *(3-(i + 1)%4)&0xff)<< 8)| ((binarray [i + 2 >> 2] >> 8 *(3-(i + 2)%4))&0xff); for(var j = 0; j <4; j ++){if(i * 8 +j * 6> binary.length * 32)str += b64pad; else str += tab.charat((triplet >> 6 *(3 -j))&0x3f); }} return str;}JavaScriptの暗号化に興味のある友人は、このサイトのオンラインツールを参照することもできます。
MD5オンライン暗号化ツール
エスケープ暗号化/復号化ツール
オンラインSHA1暗号化ツール
Thunder、Express、Tornado URL暗号化/復号化ツール
パスワードセキュリティオンライン検出
高強度パスワードジェネレーター
JavaScriptの詳細については、このサイトのトピックをご覧ください:「JavaScriptの暗号化と復号化スキルの要約」、「JavaScriptのスイッチング特殊効果とスキルの要約」、「JavaScript検索アルゴリズムのスキルの概要」、「Javascriptアニメーションの特殊効果とスキルの要約」の要約「Javascript Animation Animation Special Effects and」アルゴリズムのスキル」、「JavaScriptトラバーサルアルゴリズムとスキルの要約」および「JavaScriptの概要数学的操作の使用」
この記事がみんなのJavaScriptプログラミングに役立つことを願っています。