1. 程式人生 > >微信小程式3des加密解密,這個需要看我上一遍文章微信小程式不支援window物件跟navigator物件... 本加密是存在問題的,加密java有時候不能解開

微信小程式3des加密解密,這個需要看我上一遍文章微信小程式不支援window物件跟navigator物件... 本加密是存在問題的,加密java有時候不能解開

var base64ende = require('../utils/Base64.js');

/**

* @description 3DES加密解密

*/

function des(key, message, encrypt, mode, iv, padding) {

if (encrypt) { message = unescape(encodeURIComponent(message)) } var spfunction1 = new Array(16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776

, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540
, 16842752, 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756); var spfunction2 = new Array(-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608
, -2147450848, 0, -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648, 32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, -2147483648, -2146435040, -2146402272, 1081344); var spfunction3 = new Array(520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584); var spfunction4 = new Array(8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928); var spfunction5 = new Array(256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080); var spfunction6 = new Array(536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312); var spfunction7 = new Array(2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, 67110912, 2048, 2097154); var spfunction8 = new Array(268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696); var keys = des_createKeys(key); var m = 0, i, j, temp, temp2, right1, right2, left, right, looping; var cbcleft, cbcleft2, cbcright, cbcright2; var endloop, loopinc; var len = message.length; var chunk = 0; var iterations = keys.length == 32 ? 3 : 9; if (iterations == 3) { looping = encrypt ? new Array(0, 32, 2) : new Array(30, -2, -2) } else { looping = encrypt ? new Array(0, 32, 2, 62, 30, -2, 64, 96, 2) : new Array(94, 62, -2, 32, 64, 2, 30, -2, -2) } if (padding == 2) { message += " " } else { if (padding == 1) { if (encrypt) { temp = 8 - (len % 8); message += String.fromCharCode(temp, temp, temp, temp, temp, temp, temp, temp); if (temp === 8) { len += 8 } } } else { if (!padding) { message += "\0\0\0\0\0\0\0\0" } } } var result = ""; var tempresult = ""; if (mode == 1) {

cbcleft = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++);

cbcright = (iv.charCodeAt(m++) << 24) | (iv.charCodeAt(m++) << 16) | (iv.charCodeAt(m++) << 8) | iv.charCodeAt(m++); m = 0

} while (m < len) { left = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++); right = (message.charCodeAt(m++) << 24) | (message.charCodeAt(m++) << 16) | (message.charCodeAt(m++) << 8) | message.charCodeAt(m++); if (mode == 1) { if (encrypt) { left ^= cbcleft; right ^= cbcright } else { cbcleft2 = cbcleft; cbcright2 = cbcright; cbcleft = left; cbcright = right } } temp = ((left >>> 4) ^ right) & 252645135; right ^= temp; left ^= (temp << 4); temp = ((left >>> 16) ^ right) & 65535; right ^= temp; left ^= (temp << 16); temp = ((right >>> 2) ^ left) & 858993459; left ^= temp; right ^= (temp << 2); temp = ((right >>> 8) ^ left) & 16711935; left ^= temp; right ^= (temp << 8); temp = ((left >>> 1) ^ right) & 1431655765; right ^= temp; left ^= (temp << 1); left = ((left << 1) | (left >>> 31)); right = ((right << 1) | (right >>> 31)); for (j = 0; j < iterations; j += 3) { endloop = looping[j + 1]; loopinc = looping[j + 2]; for (i = looping[j]; i != endloop; i += loopinc) { right1 = right ^ keys[i]; right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1]; temp = left; left = right; right = temp ^ (spfunction2[(right1 >>> 24) & 63] | spfunction4[(right1 >>> 16) & 63] | spfunction6[(right1 >>> 8) & 63] | spfunction8[right1 & 63] | spfunction1[(right2 >>> 24) & 63] | spfunction3[(right2 >>> 16) & 63] | spfunction5[(right2 >>> 8) & 63] | spfunction7[right2 & 63]) } temp = left; left = right; right = temp } left = ((left >>> 1) | (left << 31)); right = ((right >>> 1) | (right << 31)); temp = ((left >>> 1) ^ right) & 1431655765; right ^= temp; left ^= (temp << 1); temp = ((right >>> 8) ^ left) & 16711935; left ^= temp; right ^= (temp << 8); temp = ((right >>> 2) ^ left) & 858993459; left ^= temp; right ^= (temp << 2); temp = ((left >>> 16) ^ right) & 65535; right ^= temp; left ^= (temp << 16); temp = ((left >>> 4) ^ right) & 252645135; right ^= temp; left ^= (temp << 4); if (mode == 1) { if (encrypt) { cbcleft = left; cbcright = right } else { left ^= cbcleft2; right ^= cbcright2 } } tempresult += String.fromCharCode((left >>> 24), ((left >>> 16) & 255), ((left >>> 8) & 255), (left & 255), (right >>> 24), ((right >>> 16) & 255), ((right >>> 8) & 255), (right & 255)); chunk += 8; if (chunk == 512) { result += tempresult; tempresult = ""; chunk = 0 } } result += tempresult; result = result.replace(/\0*$/g, ""); if (!encrypt) { if (padding === 1) { var len = result.length, paddingChars = 0; len && (paddingChars = result.charCodeAt(len - 1)); (paddingChars <= 8) && (result = result.substring(0, len - paddingChars)) } result = decodeURIComponent(escape(result)) } return result

} function des_createKeys(key) {

var pc2bytes0 = new Array(0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512, 516, 536871424, 536871428, 66048, 66052, 536936960, 536936964); var pc2bytes1 = new Array(0, 1, 1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833, 67109120, 67109121, 68157696, 68157697); var pc2bytes2 = new Array(0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272); var pc2bytes3 = new Array(0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072, 2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144); var pc2bytes4 = new Array(0, 262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240, 4112, 266256); var pc2bytes5 = new Array(0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488); var pc2bytes6 = new Array(0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746); var pc2bytes7 = new Array(0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568); var pc2bytes8 = new Array(0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578); var pc2bytes9 = new Array(0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488); var pc2bytes10 = new Array(0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800); var pc2bytes11 = new Array(0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744); var pc2bytes12 = new Array(0, 4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744, 134221840, 524304, 528400, 134742032, 134746128); var pc2bytes13 = new Array(0, 4, 256, 260, 0, 4, 256, 260, 1, 5, 257, 261, 1, 5, 257, 261); var iterations = key.length > 8 ? 3 : 1; var keys = new Array(32 * iterations); var shifts = new Array(0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0); var lefttemp, righttemp, m = 0, n = 0, temp; for (var j = 0; j < iterations; j++) {

var left = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++); var right = (key.charCodeAt(m++) << 24) | (key.charCodeAt(m++) << 16) | (key.charCodeAt(m++) << 8) | key.charCodeAt(m++); temp = ((left >>> 4) ^ right) & 252645135; right ^= temp; left ^= (temp << 4); temp = ((right >>> -16) ^ left) & 65535; left ^= temp; right ^= (temp << -16); temp = ((left >>> 2) ^ right) & 858993459; right ^= temp; left ^= (temp << 2); temp = ((right >>> -16) ^ left) & 65535; left ^= temp; right ^= (temp << -16); temp = ((left >>> 1) ^ right) & 1431655765; right ^= temp; left ^= (temp << 1); temp = ((right >>> 8) ^ left) & 16711935; left ^= temp; right ^= (temp << 8); temp = ((left >>> 1) ^ right) & 1431655765; right ^= temp; left ^= (temp << 1); temp = (left << 8) | ((right >>> 20) & 240);

left = (right << 24) | ((right << 8) & 16711680) | ((right >>> 8) & 65280) | ((right >>> 24) & 240); right = temp; for (var i = 0; i < shifts.length; i++) { if (shifts[i]) { left = (left << 2) | (left >>> 26); right = (right << 2) | (right >>> 26) } else { left = (left << 1) | (left >>> 27); right = (right << 1) | (right >>> 27) } left &= -15; right &= -15; lefttemp = pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 15] | pc2bytes2[(left >>> 20) & 15] | pc2bytes3[(left >>> 16) & 15] | pc2bytes4[(left >>> 12) & 15] | pc2bytes5[(left >>> 8) & 15] | pc2bytes6[(left >>> 4) & 15]; righttemp = pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 15] | pc2bytes9[(right >>> 20) & 15] | pc2bytes10[(right >>> 16) & 15] | pc2bytes11[(right >>> 12) & 15] | pc2bytes12[(right >>> 8) & 15] | pc2bytes13[(right >>> 4) & 15]; temp = ((righttemp >>> 16) ^ lefttemp) & 65535; keys[n++] = lefttemp ^ temp; keys[n++] = righttemp ^ (temp << 16) }

} return keys

} function genkey(key, start, end) { return { key: pad(key.slice(start, end)), vector: 1 } } function pad(key) { for (var i = key.length; i < 24; i++) { key += "0" } return key } var DES3 = { encrypt: function (key, input) { var des3iv = genkey(key, 0, 8); var genKey = genkey(key, 0, 24); return base64ende.btoa(des(genKey.key, input, 1, 1, des3iv.key, 1)) }, decrypt: function (key, input) { var des3iv = genkey(key, 0, 8); var genKey = genkey(key, 0, 24); return des(genKey.key, base64ende.atob(input), 0, 1, des3iv.key, 1) } };

module.exports = {

DES3: DES3

}

相關推薦

程式3des加密解密這個需要文章程式支援window物件navigator物件... 加密是存在問題的加密java有時候解開

var base64ende = require('../utils/Base64.js'); /** * @description 3DES加密解密 */ function des(key, message, encrypt, mode, iv, padding

Spark 根堆(TreeSet)實現TopN問題-------基於文章的優化

第三步優化:假如資料量非常大的話,toList方法會產生記憶體溢位,使用treeSet方法可以解決 treeset既可以實現排序,還能有效的控制輸出的大小。 package day02 import java.net.URL import org.apach

零基礎入門Python數據分析需要懂這張圖附下載鏈接!

展現 ima fff 整數 由於 不能 csdn 問題 回復 摘要 在做數據分析的過程中,經常會想數據分析到底是什麽?為什麽要做數據數據分析?數據分析到底該怎麽做?等這些問題。對於這些問題,一開始也只是有個很籠統的認識。 最近這兩天,讀了一下早就被很多人推薦的《誰說菜鳥不會

零基礎入門Python資料分析需要懂這張圖附下載連結!

摘要 在做資料分析的過程中,經常會想資料分析到底是什麼?為什麼要做資料資料分析?資料分析到底該怎麼做?等這些問題。對於這些問題,一

程式支援window物件Navigator物件Base64轉碼和解碼問題

本程式碼來源網址:http://www.xuebuyuan.com/zh-hant/1810251.htmlvar base64hash = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';// btoa method//b

自學java能找到工作嗎?位月薪13k的自學程式設計師分享自己是如何學會java

找一份工作,和你從什麼地方獲得這些能力是沒有直接關係的。不管你是自學的,還是去培訓機構獲得的,只要你有這個能力,可以勝任職位要求,就可以找到工作。所以說能力是很重要的。 我是計算機專業畢業的,當時在網際網路公司做程式設計,並不是所有的程式設計師都是科班出身的,有的是自學,有的是參加培訓機構

文章徹底瞭解程式

小程式 基礎知識 小程式實現原理 微信 iOS 執行在 webkit(蘋果開源的瀏覽器核心),Android 執行在 X5(QQ瀏覽器核心)。 支付寶 小程式呼叫系統的 API 小程式的架構 小程式與 Andro

購物車重寫購物車

hose pin 技術分享 span 余額 png pri 商品 macbook product_list = [(‘iphone‘,5888),(‘macbook‘,12000),(‘meilv‘,998),(‘pen‘,5),(‘beizi‘,1),(‘text‘,2

初學html任務1:一個簡單html頁面要求:內容頁面裝文章 用html來分段

enter pos 工程師 分享圖片 visit 技術 運行 並且 center 這是主要內容部分,用html實現版塊分布。 接下來是樣式部分。 讓頁面所有元素的padding和margin都設置為0 ; 否則加入一張大的覆蓋的背景圖片後,會由於瀏覽器的緣故,圖片周邊有

Python多進程,同步互斥,號量,鎖補充文章

python多進程 text stdout 執行 pause mat 1.7 hit splay 進程補充進程間的信號信號量(信號燈)進程的同步互斥Event事件Lock 鎖 進程補充 進程間的信號 信號是唯一的異步通信方法 一個進程向另一個進程發送一個信號來傳遞

在Payground裏面輸入代碼的時候沒有直接輸出結果這個需要如何設置的呢

控制臺 重新 image vpd 代碼 分享 mage ESS 如何 當輸入變量時候,右邊會出現變量的結果,這不需要什麽設置。如果沒有出現,請等待,或者重新啟動你的工程。如果有print語句輸出結果,可以點擊右上角的 按鈕,打開控制臺。我在Payground裏面輸入代碼的時

新華三+福建工院給數字人才培養“課”!

如今,數字經濟正在推動各行各業迅速發展變化。 相關資料顯示,就在過去的2017年,我國數字經濟規模已經高達7.2萬億元,同比增長20.3%,佔GDP的比重達到32.9%,規模位居全球第二。 其中人工智慧、大資料、物聯網、雲端計算等新一代資訊科技均取得突出進展,數字經濟與傳統產業加速融合,

在開始準備測試環境前需要測試伺服器的那些資訊?

查詢伺服器版本 lsb_release -a 結果 LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-

winform DataGridView 重新整理滾動條定位到次的位置

DataGridView  輸出列表,經常會用到滾動條。 在重新載入列表後,如果還要定位到上一次滾動條所在的位置,那下面的方法就能實現, 1  給DataGridView   繫結Scroll 事件。 2  Scroll 事件要做的事,分別記錄滾動條移動位置的數值。 用

文章搞懂高階程式設計師、架構師、技術總監、CTO從薪資到技能的區別

“ 我希望用一篇文章完全讓大家正確的理解從程式設計師到架構師、技術經理、技術總監、CTO的完整區別以及進階要領。 只有客觀去認識,才會更加合理的找到自己的擅長點,從而更好的發展自己。 上圖是典型的薪資結構圖,我們先從高階程式設計師談起。 高階程式設計師 一

ios開發:怎麼實現點選一個按鈕跳轉到一個新的介面並回退到介面

iOS三種檢視切換的原理各不相同:UITabBarController:以平行的方式管理檢視,各個檢視之間往往關係並不大,每個加入到UITabBarController的檢視都會進行初始化即使當前不顯示在介面上,相對比較佔用記憶體。UINavigationControlle

卷積神經網路入門種全卷積神經網路(LeNet)從左至右依次為卷積→子取樣→卷積→子取樣→全連線→全連線→高斯連線測試 最後為了檢驗 CNN 能否工作我們準備不同的另組圖片與標記集(能在訓練

轉載來自:http://blog.csdn.net/maweifei/article/details/52443995 第一層——數學部分 CNN 的第一層通常是卷積層(Convolutional Layer)。輸入內容為一個 32 x 32 x 3 的畫素值陣列。現在

W10家庭版在遠端連線時出現“身份驗證錯誤要求函式支援。遠端計算機:這可能是由於CredSSP加密Oracle修正”

安裝w10系統由於不是企業版,而是家庭版,遠端連線的時候出現下面問題經過小編的持續努力,終於成功的解決了問題,具體流程如下(強烈建議安裝企業版,避免麻煩):首先網上搜索有如下2種解決方案:情況1中認為需要加密Oracle修正,但是在w10家庭版中仔細查詢,發現並沒有組策略這類

CAJ怎麽轉換成PDF這個方法次就會

jpg 遇到 1.5 ges pro ces 自己的 辦公室 安裝 經常在辦公室遊走的人,因為工作的需要每天都會接觸到許多不同格式的文件,也會遇到一些不經常用的CAJ文件,而這個格式一般在下載之後是無法直接打開的,要想打開CAJ文件,需要將文件轉換成PDF格式,那麽CAJ怎

自定義瀏覽器滾動條的樣式打造屬於你的滾動條風格——相容IE和webkit(ff支援)

前段時間,到網上找素材時,看到了一個很個性的滾動條式,開啟Chrome的除錯工具看了一下,發現不是用JavaScript來模擬實現的,覺得 有必要折騰一下。於是在各大瀏覽器中對比了一下,發現只用Chrome適用,也就是說這個用的是Chrome的私有CSS屬性。便百之谷之後,發現原來不 僅僅只用Chrome,