Прежде всего, не существует такого понятия, как 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
для сгенерирования ключей, иначе четность не может быть установлена.
Другим способом проверки правильности ключа является дешифрование некоторой известной пары открытого текста/шифрованного текста/секретного ключа с использованием обоих алгоритмов.
Вам предстоит пройти долгий путь, прежде чем это станет реальным вопросом. –
У вас есть данные, и вам нужно знать, является ли это зашифрованным ключом AES или зашифрованным ключом 3DES? Вы знаете, какой алгоритм шифрования был использован? –
@GregS отвечает в любом случае :) –