functiona(a) { var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = ""; for (d = 0; a > d; d += 1) e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e); return c } functionb(a, b) { var c = CryptoJS.enc.Utf8.parse(b) , d = CryptoJS.enc.Utf8.parse("0102030405060708") , e = CryptoJS.enc.Utf8.parse(a) , f = CryptoJS.AES.encrypt(e, c, { iv: d, mode: CryptoJS.mode.CBC }); return f.toString() } functionc(a, b, c) { var d, e; returnsetMaxDigits(131), d = newRSAKeyPair(b,"",c), e = encryptedString(d, a) } ////////////////// 加密函數 ////////////////// functiond(d, e, f, g) { //d是【未加密前的參數】,e、f、g是已知的定值 var h = {} , i = a(16); //a會返回16個隨機的字符串,即i是隨機的 //這裡對第1個函數進行了2次AES return h.encText = b(d, g), //b是AES加密,CBC模式 h.encText = b(h.encText, i), //這裡對第2個參數進行了RSA加密 //而i是一個隨機的字符串,e、f是固定的 //因此只需要固定i,那麼encSecKey就是固定的 //可以動調獲取i和encSecKey的值,然後直接寫死在爬蟲程序中就可以 h.encSecKey = c(i, e, f), h }
# 固定的參數 encSecKey = "d408e6881677cf32231835eb33caa8d6c48ab2769efa209eaa2178df039c899e0083959c5084d2a017c9548962608b1ac29f69deb3906fe4bb128d848b40df8755fd28a9b657c9bf98f2ef99877d87611167db0b1b2737effd5d7c4fa0db6fd1c055532f3ba62a1e39b73266e355c4d70d3f3dfef43d9a9d5c758001f70bb7a6" i = "TfyOQ9mmmJOZEI7g" e = "010001" f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7" g = "0CoJUm6Qyw8W8jud"
# data需為字符串,這樣才能加密 defgetEncText(data): first = myEnc(data,g) return myEnc(first,i)
# AES加密的內容必須為16的倍數,並需按如下規則進行處理: # 當data長度為12時,16-12=4,必須補充4個chr(4),如此類推 # 特別地,當data正好為16時,也需要補充 defto_16(data): pad = 16 - len(data)%16 data += pad*chr(pad) return data