2013-05-29 56 views
2

如何才能確定密鑰(AES256或3DES 256)的加密...由於兩個密鑰都是32個字符(每個char * 32 char = 8位)= 256位, Mime編碼。AES256 vs 3DES 256密鑰檢測

MQAyAEgAOgA5ADUAMwA3AD8AQgBFAD4A ---> AES256鍵

g1EOWGFb + JjCZ7BbH2RergtKUtDfXrNb ---> 3DES密鑰

的AES密鑰被OpenSSL中製成,而那些3DES使用的Java製成與跟隨Apis。

javax.crypto.Cipher; 
javax.crypto.KeyGenerator; 
javax.crypto.SecretKey; 
javax.crypto.SecretKeyFactory; 
javax.crypto.spec.DESedeKeySpec; 
javax.crypto.spec.IvParameterSpec; 
+2

在這成爲一個真正的問題之前,你還有很長的路要走。 –

+0

你有一些數據,你需要知道它是一個加密的AES密鑰或加密的3DES密鑰?你知道使用了什麼加密算法嗎? –

+0

@GregS無論如何回答:) –

回答

2

首先,不存在這樣的東西作爲3DES 256 3DES具有128個或192位,其中可以有效地利用112個168位的密鑰大小。請注意,3DES的安全裕度更低。

另一方面,AES可以使用128位,192位和256位,所有這些都可以使用。

現在基64(不SMIME,這是一個更高級別的協議)每個字符有6位(不包括末尾的假位)。如果我檢查你的密鑰,它們都是192位的大小,所以這不會幫助你區分密鑰。您可以使用Apache Codec庫來解碼base 64字符串。

但是,您的3DES密鑰 - 第二個 - 似乎使用3個單DES密鑰的奇數奇偶校驗字節。這可以用來區分各個鍵。請注意,這不是萬無一失,隨機生成的 AES密鑰可能會偶然單獨正確設置奇偶校驗位。但是,發生這種情況的可能性大約爲2^24

可以使用方法DESedeKeySpec.isParityAdjusted(byte[] key, int offset)來檢查奇偶校驗是否正確設置。當然首先需要解碼base64字符串。

請注意,有時3DES密鑰是在沒有正確設置奇偶校驗的情況下分發的。在你的情況下,你需要需要使用KeyFactory生成密鑰,否則奇偶校驗可能不會被設置。

檢查密鑰是否屬於正確類型的另一種方法是使用兩種算法對某些已知的明文/密文/密鑰對進行解密。

+0

@Duncan Jones我的AES密鑰是由通過在Base64中編碼一個隨機字符串。我的3DES密鑰是使用SecretKeyFactory製作的 – user2402616

+0

以下是用於生成我的3DES密鑰的代碼......可能它在檢測已經制作的密鑰是否來自它時會很有用。 – user2402616

+0

公共靜態字符串generateKey(){ \t \t嘗試{ \t \t \t的KeyGenerator則newkey = KeyGenerator.getInstance( 「DESede」); \t \t \t SecretKey key = newKey.generateKey(); \t \t \t return Base64.encodeBytes(key.getEncoded()); \t \t}趕上(拋出:NoSuchAlgorithmException E){ \t \t \t // TODO自動生成的catch程序塊 \t \t \t e.printStackTrace(); \t \t} \t \t return「」; \t} – user2402616