CryptoJs是前端加密用的,具體介紹:http://code.google.com/p/crypto-js/ 對應國內免費CDN 服務:http://www.bootcdn.cn/crypto-js/
我是工作上要爬蟲電信的信息,要先登錄呀,於是我查看了他的代碼
1 <script type="text/javascript"> 2 $("#loginbtn").click(function() { 3 var t = $("#txtAccount").val(), 4 n = $("#hidUType").val(), 5 i = $("#txtCityNo").val(), 6 o = $("#txtShowPwd").attr("data-preval"), 7 u = $("#txtPassword").val(), 8 r = $("#txtCaptcha").val(), 9 f, 10 e; 11 if (t == "" || t == txtAccount_Default && n != "204" || t == txtAccount_Default_YWMob && n == "204") return $("#txtAccount").focus(), 12 showErrMsg("請輸入用戶名"), 13 !1; 14 if (n != "201") if (n == "202" || n == "203") { 15 if (i == "" || i == txtCityNo_Default) return $("#txtCityNo").focus(), 16 showErrMsg("請輸入地市"), 17 !1; 18 if (i = $("#hidCityNo").val(), i == "") return $("#txtCityNo").focus(), 19 showErrMsg("請重新輸入地市"), 20 !1 21 } else if (n == "204") { 22 if (!checkIsCellphone(t)) return showErrMsg("請輸入正確的手機號碼"), 23 !1 24 } else if ($("#txtAccount").blur(), n = $("#hidUType").val(), n == "") return showErrMsg("請重新輸入登錄信息"), 25 !1; 26 if (u == "") return $("#txtShowPwd").focus(), 27 showErrMsg("請輸入" + o), 28 !1; 29 if (f = $("#hidRandomFlag").val(), e = ValidatePwd(n, t, u, f), e.Code != "0") return $("#txtShowPwd").focus(), 30 showErrMsg('密碼過於簡單,請通過“<a style="color: #ff8200" onclick="wjmmShow();">忘記密碼<\/a>”進行重置。'), 31 !1; 32 if (r == txtCaptcha_Default && (r = "", $("#txtCaptcha").val(r)), $("#liCaptcha").is(":visible") && r == "") return $("#txtCaptcha").focus(), 33 showErrMsg("請輸入" + txtCaptcha_Default), 34 !1; 35 reqInfo_Cookie_W(); 36 $("#txtPassword").valAesEncryptSet(); 37 $("#loginForm").submit() 38 }); 39 40 41 $.fn.valAesEncryptSet = function() { 42 var i = this.val(), 43 n, 44 t; 45 try { 46 n = this.aesDecrypt(i); 47 n != "" && (t = this.aesEncrypt(n), t != i && (n = "")) 48 } catch(r) { 49 n = "" 50 } 51 return n == "" && (t = this.aesEncrypt(i)), 52 this.val(t), 53 this.val() 54 } 55 56 $.fn.aesEncrypt = function(n) { 57 var t = CryptoJS.MD5("login.189.cn"), 58 i = CryptoJS.enc.Utf8.parse(t), 59 r = CryptoJS.enc.Utf8.parse("1234567812345678"), //31323334353637383132333435363738 60 u = CryptoJS.AES.encrypt(n, i, { 61 iv: r 62 }); 63 return u + "" 64 }; 65 66 67 $.fn.aesDecrypt = function(n) { 68 var t = CryptoJS.MD5("login.189.cn"), 69 i = CryptoJS.enc.Utf8.parse(t), 70 r = CryptoJS.enc.Utf8.parse("1234567812345678"); 71 return CryptoJS.AES.decrypt(n, i, { 72 iv: r 73 }).toString(CryptoJS.enc.Utf8) 74 }; 75 </script >
代碼看的少看不太懂呀,於是我就自己試了一下其實就是把代碼復制自己斷點運行看看。
<script type="text/javascript"> $.fn.valAesEncryptSet = function() { var i = "123", n, t; var hash = CryptoJS.MD5("Message"); var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase"); try { n = this.aesDecrypt(i); n != "" && (t = this.aesEncrypt(n), t != i && (n = "")) var c = n != ""; alert( c && (t = this.aesEncrypt(n), t != i && (n = ""))); } catch(r) { n = "" } alert(n == "" && (t = this.aesEncrypt(i)), this.val(t), this.val()); return n == "" && (t = this.aesEncrypt(i)), this.val(t), this.val() } //加密 $.fn.aesEncrypt = function(n) { //U2FsdGVkX1+vmOX1CZKawT1bU4PKfohd/2EJZKD25l0= var t = CryptoJS.MD5("login.189.cn"), //33b21adee1b8620a7ba81aea1a80c724 i = CryptoJS.enc.Utf8.parse(t), //3333623231616465653162383632306137626138316165613161383063373234 r = CryptoJS.enc.Utf8.parse("1234567812345678"), //31323334353637383132333435363738 u = CryptoJS.AES.encrypt(n, i, { iv: r }); //U2FsdGVkX1+vmOX1CZKawT1bU4PKfohd/2EJZKD25l0= return u + "" }; //E+kuJYooy4s85LxPhwh5kw== //解密 $.fn.aesDecrypt = function(n) { var t = CryptoJS.MD5("login.189.cn"), //33b21adee1b8620a7ba81aea1a80c724 (傳入的字符串(還是原來字符串)進行md5)// 6c6f67696e2e3138392e636e(utf8轉碼獲取十六進制編碼) i = CryptoJS.enc.Utf8.parse(t), //3333623231616465653162383632306137626138316165613161383063373234 (utf8轉碼獲取十六進制編碼byte[]) r = CryptoJS.enc.Utf8.parse("1234567812345678"); //31323334353637383132333435363738 return CryptoJS.AES.decrypt(n, i, { iv: r }).toString(CryptoJS.enc.Utf8) }; </script> <!-- <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script> --> <!-- <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script> --> <script src="//cdn.bootcss.com/crypto-js/3.1.2/components/core.js"></script> <script src="//cdn.bootcss.com/crypto-js/3.1.2/rollups/aes.js"></script> <!-- <script src="//cdn.bootcss.com/crypto-js/3.1.2/components/aes.js"></script> --> <script src="//cdn.bootcss.com/crypto-js/3.1.2/components/md5.js"></script> <script src="//cdn.bootcss.com/crypto-js/3.1.2/components/enc-base64.js"></script>
第一個坑(引用js錯誤)
首先core一定要引用的,其次是注意引用js是否正確這里我把aes引用錯了,(這兩個js都是存在的)
第二個坑(如何查看編碼后的字符串)
在你想要查看變量時候直接查看
最開始我是彈框看對應的值,但是這樣看着不太方便,后來我在看他的代碼發現竟然是這樣獲取的。
對於 加密的變量 直接在后面 +"" 即可查看到加密后字符串
字符串編碼后(Utf8.parse)文字要用查看( toString(CryptoJS.enc.Utf8) )
CtyptoJS下載
后面java解析方法參考了http://www.cnblogs.com/molao-doing/articles/3972565.html
另外如果你的key不是16,且遇到異常為java.security.InvalidKeyException: Illegal key size or default parameters
請參考這個替換jar,http://blog.csdn.net/l1028386804/article/details/42706039