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=
#==============================================================

После того, как я это сделал, ваш пример кода работает нормально.

Другие вопросы по тегам