第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何格式化數(shù)據(jù)以正確解密 CryptoJS 中的十六進(jìn)制字符串

如何格式化數(shù)據(jù)以正確解密 CryptoJS 中的十六進(jìn)制字符串

臨摹微笑 2023-06-15 17:22:02
我有一個(gè)通過直接 IP 接收信息的 TCP 服務(wù)器。我收到以 AES-128-CBC 加密的此信息。(十六進(jìn)制字節(jié)緩沖區(qū))然后我將緩沖區(qū)轉(zhuǎn)換為一串沒有空格的十六進(jìn)制字節(jié)?!霸枷ⅰ蔽彝ㄟ^了 IV,即加密消息,并且我對(duì)密鑰進(jìn)行了硬編碼。我仍然無法正確解密消息。我通常會(huì)得到一個(gè)完全不同的解密或一個(gè)空字符串。我假設(shè)我的一個(gè)或多個(gè)變量格式錯(cuò)誤?本周之前我對(duì)密碼學(xué)的經(jīng)驗(yàn)為零,但這是我的任務(wù)。因此,如果問題很小,我深表歉意。我正在從 C 語言的同事那里接收數(shù)據(jù)。我擔(dān)心 CryptoJS 與我傳遞的數(shù)據(jù)不兼容?任何幫助深表感謝。代碼.jsconst CryptoJS = require("crypto-js");var originalMsg = "5303F15FB8317A010300000000000001F3E0C003E24340E4E4"var encrypted = "00000003C4302B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC"var key = "242E389B1672B4ECEA92FE7466DF3A52"var iv = "0000E34500FF0000000000FF00000000"var decryptData2 = function(encryptedData) {    var C = CryptoJS;                              var Key = CryptoJS.enc.Hex.parse("242E389B1672B4ECEA92FE7466DF3A52")    var IV = CryptoJS.enc.Hex.parse("0000E34500FF0000000000FF00000000")// I have tried     var decryptedText = C.AES.decrypt(encryptedData, Key, {                       iv: IV,        mode: C.mode.CBC,        padding: C.pad.Pkcs7    });       return decryptedText.toString(CryptoJS.enc.Utf8);}var result = decryptData2(CryptoJS.enc.Hex.parse("00000003C4302B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC"))console.log(result); 編輯:更新 iv 和加密變量//old varsencrypted ="00000003C4302B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC"iv = "02C4100000E34500FF0000000000FF00"
查看完整描述

1 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

依賴樣本數(shù)據(jù)總是好的,因?yàn)檫@對(duì)找到可行的解決方案有很大幫助。您可以在下面找到一個(gè)能夠解密消息的示例程序。


一些評(píng)論它是如何工作的:


a) 我將所有給定數(shù)據(jù)轉(zhuǎn)換為 Crypto-JS 字?jǐn)?shù)組以與加密方法兼容:


var key = CryptoJS.enc.Hex.parse("242E389B1672B4ECEA92FE7466DF3A52");

b) 要查看我應(yīng)該使用哪些加密數(shù)據(jù)進(jìn)行解密,我首先對(duì)originalMsg進(jìn)行加密并獲得以下輸出:


ciphertext:             2b119e7bb9c36655f6bcdf251808c6748a11949a89309ad17600f6164ff45cdc

c.txt exp:  00000003c4302b119e7bb9c36655f6bcdf251808c6748a11949a89309ad17600f6164ff45cdc

第一行是加密的“originalMsg”,第二行是您識(shí)別為“加密”的數(shù)據(jù)——看到區(qū)別了嗎?正如我之前評(píng)論的那樣,加密值太長(zhǎng)了 6 個(gè)字節(jié)(它必須是 16 的倍數(shù),你的“加密”是 38 個(gè)字節(jié)長(zhǎng))。


c) 嘗試解密需要 base64 編碼的輸入(還有其他方法,這種方法是我在這里使用它的最方便的方法)所以首先我將單詞數(shù)組“加密”編碼為(Base64 編碼)“encryptedBase64 " 并將字符串呈現(xiàn)給 aesCbcDecrypt 函數(shù)。由于數(shù)據(jù)太長(zhǎng),沒有輸出。


var encryptedBase64 = CryptoJS.enc.Base64.stringify(encrypted);

var decrypted = aesCbcDecrypt(key, iv, encryptedBase64);

console.log("decrypted: " + decrypted);

result:

decrypted:

d) 現(xiàn)在我從加密中刪除前 6 個(gè)字節(jié)(12 個(gè)十六進(jìn)制“字符”),并將剩余數(shù)據(jù)用于相同的解密功能:


var encrypted2 = CryptoJS.enc.Hex.parse("2B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC");

console.log("encrypted2 length: " + encrypted2.sigBytes);

var encrypted2Base64 = CryptoJS.enc.Base64.stringify(encrypted2);

var decrypted2 = aesCbcDecrypt(key, iv, encrypted2Base64);

console.log("decrypted2: " + decrypted2);

console.log("orig.Msg  : " + originalMsgHex);

result:

decrypted2: 5303f15fb8317a010300000000000001f3e0c003e24340e4e4

orig.Msg  : 5303F15FB8317A010300000000000001F3E0C003E24340E4E4

decrypted2 值現(xiàn)在等于 originalMsg。


如果您想查看在在線編譯器中運(yùn)行的代碼 - 這里是鏈接: https: //repl.it/@javacrypto/SoCryptoJsDecrypt#index.js


我讓您將這些信息放在一起以獲得編程解決方案,因?yàn)檫@應(yīng)該只解釋如何獲取解密數(shù)據(jù)。


完整輸出:


key length: 16

iv length: 16

ciphertext:             2b119e7bb9c36655f6bcdf251808c6748a11949a89309ad17600f6164ff45cdc

c.txt exp:  00000003c4302b119e7bb9c36655f6bcdf251808c6748a11949a89309ad17600f6164ff45cdc

encrypted length: 38

decrypted:

encrypted2 length: 32

decrypted2: 5303f15fb8317a010300000000000001f3e0c003e24340e4e4

orig.Msg  : 5303F15FB8317A010300000000000001F3E0C003E24340E4E4

安全警告:該代碼沒有異常處理,僅用于教育目的。


完整代碼:


const CryptoJS = require("crypto-js");

var originalMsgHex = "5303F15FB8317A010300000000000001F3E0C003E24340E4E4";

var originalMsg = CryptoJS.enc.Hex.parse(originalMsgHex);//("5303F15FB8317A010300000000000001F3E0C003E24340E4E4");

var encrypted = CryptoJS.enc.Hex.parse("00000003C4302B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC");

var key = CryptoJS.enc.Hex.parse("242E389B1672B4ECEA92FE7466DF3A52");

var iv = CryptoJS.enc.Hex.parse("0000E34500FF0000000000FF00000000");

console.log("key length: " + key.sigBytes);

console.log("iv length: " + iv.sigBytes);


// encryption of originalMsg

var ciphertext = aesCbcEncrypt(key, iv, originalMsg);

console.log("ciphertext:             " + ciphertext);

console.log("c.txt exp:  " + encrypted);


// decryption of encryption fails due to wrong length (not multiple of 16)

console.log("encrypted length: " + encrypted.sigBytes); // result: 38

// prepare encrypted for decryption by base64encoding

var encryptedBase64 = CryptoJS.enc.Base64.stringify(encrypted);

var decrypted = aesCbcDecrypt(key, iv, encryptedBase64);

console.log("decrypted: " + decrypted);


// cutting off the first 6 bytes from encrypted

var encrypted2 = CryptoJS.enc.Hex.parse("2B119E7BB9C36655F6BCDF251808C6748A11949A89309AD17600F6164FF45CDC");

console.log("encrypted2 length: " + encrypted2.sigBytes);

var encrypted2Base64 = CryptoJS.enc.Base64.stringify(encrypted2);

var decrypted2 = aesCbcDecrypt(key, iv, encrypted2Base64);

console.log("decrypted2: " + decrypted2);

console.log("orig.Msg  : " + originalMsgHex);


function aesCbcEncrypt(keyF, ivF, data) {

  const cipher = CryptoJS.AES.encrypt(data, keyF,

  {

    iv: ivF,

    padding: CryptoJS.pad.Pkcs7,

    mode: CryptoJS.mode.CBC

  });

  return cipher.ciphertext;

}


function aesCbcDecrypt(keyF, ivF, ciphertext) {

  const cipher = CryptoJS.AES.decrypt(ciphertext, keyF,

  {

    iv: ivF,

    padding: CryptoJS.pad.Pkcs7,

    mode: CryptoJS.mode.CBC

  });

  return cipher;

}


查看完整回答
反對(duì) 回復(fù) 2023-06-15
  • 1 回答
  • 0 關(guān)注
  • 554 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)