2015-11-11 191 views
4

我必須解密一些AES加密的字符串。Crypto.js用字節數組中的密鑰和iv(向量)解密

實施例加密的字符串:129212143036071008133136215105140171136216244116

我有一個鍵,以及(iv)提供給我一個字節數組格式的向量:

鍵:[123,217 ,20,11,24,26,85,45,114,184,27,162,37,115,222,209,241,24,175,144,175,53,196,29,24,23,17 ,218,131,226,53,209]

向量(iv):[146,66,191,151,23,3 ,113,119,231,131,133,112,79,32,114,136]

我應該能夠解密串和獲得:

正確的輸出:TESTTEST

我想使用Crypto.js,但我找不到使用提供的密鑰和向量的方法。我找不到將字節數組轉換爲十六進制的方法。

var encrypted = '129212143036071008133136215105140171136216244116'; 
var key = CryptoJS.enc.Hex.parse([ 123, 217, 20, 11, 24, 26, 85, 45, 114, 184, 27, 162, 37, 115, 222, 209, 241, 24, 175, 144, 175, 53, 196, 29, 24, 23, 17, 218, 131, 226, 53, 209 ]); 
var iv = CryptoJS.enc.Hex.parse([ 146, 66, 191, 151, 23, 3, 113, 119, 231, 131, 133, 112, 79, 32, 114, 136 ]); 

var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv }); 

console.log('Output: '+decrypted.toString(CryptoJS.enc.Utf8)); //Should be "testtest" 

我會很感激,如果有人能告訴我如何使用解密密鑰和矢量與Crypto.js或任何其他js的方法的例子字符串。

感謝這麼多的幫助, 親切的問候

+0

請參閱http://stackoverflow.com/a/311179/152640或http://stackoverflow.com/a/9855338/152640從字節數組到十六進制相關如此問題 –

+0

真的有什麼問題你的密文。所有的字符都是0到9,所以它可能不是十六進制編碼的,因爲AES密文真的很嘈雜,A到F範圍內確實應該有一些字符。另外,如果假設CBC模式和十六進制編碼,密文長度是無效的。 –

回答

1

我不能設法解密您的原始字符串,但我可以成功地利用它來加密和解密一個新的字符串。在您的初始實現中,在aes.js中發生錯誤,因爲它期望keyiv是字符串而不是數組。我已經糾正了下面這段代碼示例:

//var encrypted = '129212143036071008133136215105140171136216244116'; 
 

 
var key = CryptoJS.enc.Hex.parse(CryptoJS.lib.ByteArray([123, 217, 20, 11, 24, 26, 85, 45, 114, 184, 27, 162, 37, 115, 222, 209, 241, 24, 175, 144, 175, 53, 196, 29, 24, 23, 17, 218, 131, 226, 53, 209])); 
 
var iv = CryptoJS.enc.Hex.parse(CryptoJS.lib.ByteArray([146, 66, 191, 151, 23, 3, 113, 119, 231, 131, 133, 112, 79, 32, 114, 136])); 
 

 
var message = 'testest' 
 
var encrypted = CryptoJS.AES.encrypt(message, key, { 
 
    'iv': iv 
 
}); 
 

 

 
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { 
 
    'iv': iv 
 
}); 
 
document.write('Output: ' + decrypted.toString(CryptoJS.enc.Utf8)); //Should be "testtest"
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script> 
 
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/pad-nopadding-min.js"></script> 
 
<script src="https://greasyfork.org/scripts/6696-cryptojs-lib-bytearray/code/CryptoJSlibByteArray.js"></script>

+0

謝謝你的回答。它真的有幫助,但不幸的是,我無法解密我必須解密的字符串。 我發現了一個非JS解決方案 - 我的答案在下面。 我想你的回答是正確的,因爲你告訴我如何將字節數組轉換爲十六進制,所以非常感謝你! – Mbmahs

+0

看看你在那裏做了什麼...覆蓋'var encrypted',然後以你的方式加密解密。值得投票但不這樣做。 –

+0

@ jeet.chanchawat,正如我在帖子中提到的,我無法解密原始字符串,因此改爲使用加密/解密示例。我同意你的看法,這是令人困惑的,因此將第一項任務評論出來。我也會試着讓這個片段再次工作,我注意到它目前的失敗。 – Jaco

相關問題