ESAPI Симметричное шифрование с использованием JavaEncryptor
Я тестирую базовые вещи в ESAPI, и я наткнулся на это учебное пособие по симметричному шифрованию, скопировал и вставил код (вместе с импортом jar-файла ESAPI 2.1.0, ESAPI.properties и validation.properties в каталог 'src' в Eclipse.)
Модифицированный код из учебника:
import org.owasp.esapi.crypto.CipherText;
import org.owasp.esapi.crypto.PlainText;
import org.owasp.esapi.errors.EncryptionException;
import org.owasp.esapi.reference.crypto.JavaEncryptor;
public class ESAPIsymEncTester {
public static void main(String[] args) throws EncryptionException{
String myplaintext = "My plaintext";
CipherText ciphertext =
JavaEncryptor.getInstance().encrypt( new PlainText(myplaintext) );
PlainText recoveredPlaintext = JavaEncryptor.getInstance().decrypt(ciphertext);
assert myplaintext.equals( recoveredPlaintext.toString() );
System.out.println("recovered plaintext: " + recoveredPlaintext.toString());
}
}
Однако когда я запускаю это в Eclipse Luna с использованием Java 1.8, я получаю следующую трассировку стека:
Exception in thread "main" org.owasp.esapi.errors.EncryptionException: Encryption failure: Invalid key exception.
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:526)
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:338)
at com.fate.engine.test.ESAPIsymEncTester.main(ESAPIsymEncTester.java:15)
Caused by: java.security.InvalidKeyException: Invalid AES key length: 96 bytes
at com.sun.crypto.provider.AESCipher.engineGetKeySize(AESCipher.java:495)
at javax.crypto.Cipher.passCryptoPermCheck(Cipher.java:1062)
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1033)
at javax.crypto.Cipher.init(Cipher.java:1367)
at javax.crypto.Cipher.init(Cipher.java:1301)
at org.owasp.esapi.reference.crypto.JavaEncryptor.encrypt(JavaEncryptor.java:504)
... 2 more
Я не уверен, является ли это ошибкой в коде JavaEncryptor.java, или я извлекаю что-то, что неправильно настроено из файла ESAPI.properties.
Я заменил главный ключ и соль, запустив JavaEncryptor и скопировав / вставив полученный ключ / соль.
Если это ошибка, я отправлю по электронной почте ребятам из ESAPI разъяснения о том, как я могу это исправить, так как я просмотрел код JavaEncryptor и не совсем ясно, откуда берутся все части.
Encryptor.MasterKey = WppLubGgsc / p6HhvcPf2LA ==
Encryptor.MasterSalt = YokRN9mjMUTZspEbzBY90NA6EC8 =
Encryptor.PreferredJCEProvider =
Encryptor.EncryptionAlgorithm = AES
Encryptor.CipherTransformation = AES / CBC / PKCS5Padding
Encryptor.cipher_modes.combined_modes = GCM, CCM, МАУП,EAX, ОСВ, CWC
Encryptor.cipher_modes.additional_allowed = CBC
Encryptor.EncryptionKeyLength = 128
Encryptor.ChooseIVMethod = случайное
Encryptor.fixedIV = 0x000102030405060708090a0b0c0d0e0f
Encryptor.CipherText.useMAC = TRUE
Encryptor.PlainText.overwrite= верно
Encryptor.HashAlgorithm = SHA-512 *****
Encryptor.HashIterations = 1024
Encryptor.DigitalSignatureAlgorithm = SHA1withDSA
Encryptor.DigitalSignatureKeyLength = 1024
Encryptor.RandomAlgorithm = SHA1PRNG
Encryptor.CharacterEncoding = UTF-8
Encryptor.KDF.PRF = HmacSHA1 *****
2 ответа
Вот что я собираюсь предложить... получить ТЕСТ версию ESAPI.properties из GitHub ("wget https://github.com/ESAPI/esapi-java-legacy/blob/master/src/test/resources/esapi/ESAPI.properties"должен работать, вы используете 'git' или сохраняете его из браузера), установите его на место и сначала используйте его как есть. Если это не удастся, значит, есть проблема в вашем подправленном коде. Если это работает, проблема в вашем файле ESAPI.properties. Многие люди уже предложили, что искать с точки зрения того, что может быть не так, но различия должны быть достаточно незначительными, чтобы вы могли их различать, сравнивая свою версию с TEST в src/test/resources/esapi/ESAPI.properties. (Между прочим, рабочая версия находится в папке "configuration/esapi/ESAPI.properties" и не включена в jar из-за некоторой ошибки в pom.xml, которую я не знаю, как исправить, поскольку я не являюсь гуру Maven).)
Если у вас есть дополнительные вопросы, свяжитесь со мной через мою учетную запись Gmail, которую вы сможете легко найти через Google, используя мое имя и термин "OWASP". Как только мы найдем ответ, который подходит вам, вы или я можем опубликовать ответ обратно в Stack Overflow, но я не часто посещаю этот форум, чтобы регулярно его отслеживать. (Хотя, если подумать, я, вероятно, получаю уведомления об ответах.)
Надеюсь это поможет,
-кевин ж стена / ESAPI разработчик криптовалют и руководитель совместного проекта
Вы забыли разместить самую важную часть вашего журнала в вопросе:
Dec 11, 2015 8:05:24 AM org.owasp.esapi.reference.JavaLogFactory$JavaLogger log
WARNING: [SECURITY FAILURE Anonymous:null@unknown -> /JavaEncryptor] Encryption key length mismatch. ESAPI.EncryptionKeyLength is 128 bits, but length of actual encryption key is 24 bits. Did you remember to regenerate your master key (if that is what you are using)???
Это подсказка, что здесь есть кое-что, что библиотека ожидает от вас.
Мне кажется, что у вас, вероятно, установлены свойства шифрования по умолчанию, как это в esapi.properties
:
Encryptor.MasterKey=owasp1
Encryptor.MasterSalt=testtest
Класс JavaEncryptor
имеет основной метод, который будет генерировать действительные свойства для вас. Запустите его в затмении или через командную строку. Это даст вам значения для замены в esapi.properties
, как это:
Dec 11, 2015 8:10:25 AM org.owasp.esapi.reference.JavaLogFactory$JavaLogger log
OFF: [SECURITY AUDIT Anonymous:null@unknown -> /SecurityProviderLoader] No Encryptor.PreferredJCEProvider specified.
SecurityConfiguration for Encryptor.EncryptionKeyLength not an integer in ESAPI.properties. Using default: 128
Generating a new secret master key
use '-print' to also show available crypto algorithms from all the security providers
SecurityConfiguration for Encryptor.EncryptionKeyLength not an integer in ESAPI.properties. Using default: 128
Copy and paste these lines into your ESAPI.properties
#==============================================================
Encryptor.MasterKey=qW0Qw+8eb1Zu1MBv5djwqA==
Encryptor.MasterSalt=b0VappFU1Hd6LjIt+TGYqQlfrdU=
#==============================================================
После того, как я это сделал, ваш пример кода работает нормально.