亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 加密函數中的 3DES 十六進制密鑰

Javascript 加密函數中的 3DES 十六進制密鑰

肥皂起泡泡 2021-07-06 13:22:05
我有一個使用 CryptoJS 的 javascript 函數來使用 3DES 密鑰加密一個 8 字節的塊。該函數正在使用密鑰 01010101010101010101010101010101,但它不適用于密鑰 ADADADADADAD0101ADADADADADAD0202。    function enc3DES(keyHex){    var block = "040502CFFFFEFDEE";    var encrypted = CryptoJS.DES.encrypt(CryptoJS.enc.Hex.parse(block), CryptoJS.enc.Hex.parse(keyHex), {        mode: CryptoJS.mode.ECB,        padding: CryptoJS.pad.Pkcs7    });        encrypted = encrypted.ciphertext.toString();        return encrypted.substr(0, 8*2).toUpperCase();    }使用上述函數 enc3DES():使用密鑰 01010101010101010101010101010101 加密的塊 040502CFFFFEFDEE 是 C9478CAA27ABA56A 并且此輸出是正確的。但是同一個塊 040502CFFFFEFDEE 用密鑰 ADADADADAD0101ADADADADADAD0202 加密的塊是 A413ABD86D52DFFB 并且這個輸出是錯誤的,正確的應該是 F6A1C5ACA15A50C3。你能幫我理解為什么這個功能只能用第一個鍵才能正常工作嗎?
查看完整描述

1 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

  • 3DES(或TripleDES)不是DES。因此CryptoJS.DES必須替換為CryptoJS.TripleDES

  • 3DES 密鑰由 3 個串聯的 DES 密鑰(K1、K2、K3)組成。有三種密鑰選項:3TDEA(所有三個密鑰都不同)、2TDEA(2 個密鑰不同且 K1 = K3)以及所有密鑰相同的第三種情況,這給出了與 DES 相同的密文。第一個鍵

    01010101010101010101010101010101

    對應第三個選項(所有鍵相同),鍵

    ADADADADADAD0101ADADADADADAD0202

    對應于第二個選項 (2TDEA)。由于 CryptoJS 需要 3DES 一個 24 字節的密鑰,因此密鑰

    010101010101010101010101010101010101010101010101

    ADADADADADAD0101ADADADADADAD0202ADADADADADAD0101

    必須使用。

  • 由于明文和密文的長度相同,所以填充不能為Pkcs7。取而代之的Pkcs7,ZeroPadding可以使用,或者,如果明文總是塊大?。?字節為3DES)的整數倍,NoPadding。如果填充更改,則可以返回整個密文(而不是子字符串)。


查看完整回答
反對 回復 2021-07-15
  • 1 回答
  • 0 關注
  • 521 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號