Заполнение JAVA Шифрование blockSizeException - PullRequest
0 голосов
/ 25 марта 2020

Я думаю, что какой-то вариант этого вопроса задавался миллион раз, но я не могу найти ответ, который, кажется, решает мою проблему.

Я унаследовал кусок кода. Он хорошо работает со строкой XXXX100, но не с XXXX1000. Он зашифровывает (генерирует строку без ошибок), хорошо работает с обоими, но не может расшифровать более длинную строку. Выдает:

javax.crypto.IllegalBlockSizeException: длина ввода должна быть кратна 8 при дешифровании с использованием зашифрованного шифра

Нужно ли делать что-то еще для дешифруемого входного текста, установить параметр где-нибудь ... или что-то еще?

package projectlocal.encryptionutilities;

import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

public class SimpleCrypt {

/** encryption master password */
private static final char[] AUTHENTIC = "8zrahH9HiDeJM60W0gmZ".toCharArray();
/** encryption algorithm */
//private static final String ALGORITHM = "PBEWithMD5AndDES";
private static final String ALGORITHM = "PBEWithMD5AndDES";
/** charset */
private static final String UTF8_CHARSET = "UTF-8";
/** encryption seed */

private static final byte[] SALT = {
    (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
    (byte) 0xde, (byte) 0x33, (byte) 0x10, (byte) 0x12,
};

/** create private constructor to prevent instantiation */
private SimpleCrypt() {/* ignore */}

public static String encrypt(final String property) throws GeneralSecurityException, UnsupportedEncodingException {
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    SecretKey key = keyFactory.generateSecret(new PBEKeySpec(AUTHENTIC));
    Cipher pbeCipher = Cipher.getInstance(ALGORITHM);
    pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
    return Base64.getMimeEncoder().encodeToString(pbeCipher.doFinal(property.getBytes()));
}

public static String decrypt(final String property) throws UnsupportedEncodingException, GeneralSecurityException {
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
    SecretKey key = keyFactory.generateSecret(new PBEKeySpec(AUTHENTIC));
    Cipher pbeCipher = Cipher.getInstance(ALGORITHM);
    pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(SALT, 20));
    return new String(pbeCipher.doFinal(Base64.getMimeDecoder().decode(property)), UTF8_CHARSET);
}

}

1 Ответ

0 голосов
/ 26 марта 2020

Это было где-то еще. Код выше работает нормально. Другая процедура заключалась в усечении более длинных строк.

Спасибо за помощь в улучшении этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...