2013-05-29 6 views
2

Как я могу определить шифрование ключа (AES256 или 3DES 256) ... Поскольку оба ключа будут 32 символа (8 бит на символ * 32 символа) = 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 для декодирования строк базы 64.

Однако ваш ключ 3DES - второй - кажется, использует нечетные байты четности для трех одиночных ключей DES. Это можно использовать для различения ключей друг от друга. Обратите внимание, что это не является надежным, случайным образом сгенерировано Ключ AES может иметь биты четности, установленные правильно случайно. Однако вероятность того, что это происходит, находится где-то около 2^24.

Для проверки правильности установки четности можно использовать метод DESedeKeySpec.isParityAdjusted(byte[] key, int offset). Разумеется, сначала необходимо декодировать базовую строку 64.

Обратите внимание, что иногда клавиши 3DES распределяются без правильного набора четности. В вашем случае вам понадобится , чтобы использовать KeyFactory для сгенерирования ключей, иначе четность не может быть установлена.

Другим способом проверки правильности ключа является дешифрование некоторой известной пары открытого текста/шифрованного текста/секретного ключа с использованием обоих алгоритмов.

+0

@ Duncan Jones Мой ключ AES был сделан путем кодирования случайной строки в Base64.Мой ключ 3DES был сделан с использованием SecretKeyFactory – user2402616

+0

Ниже приведен код, используемый для создания моих клавиш 3DES ... возможно, это будет полезно при обнаружении, если из него уже сделаны ключи. – user2402616

+0

общественности статической строки generateKey() { \t \t попытка { \t \t \t KeyGenerator = KeyGenerator.getInstance Проточите новый ключ ("DESede"); \t \t \t SecretKey key = newKey.generateKey(); \t \t \t return Base64.encodeBytes (key.getEncoded()); \t \t} задвижка (NoSuchAlgorithmException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} \t \t return ""; \t} – user2402616