微信小程式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
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,