Причина ошибки: «слишком короткий ввод» при шифровании (с помощью FPE и надувного замка) в Java/Scala.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Причина ошибки: «слишком короткий ввод» при шифровании (с помощью FPE и надувного замка) в Java/Scala.

Сообщение Anonymous »

Основываясь на ответах на другой вопрос, я пытаюсь зашифровать некоторый текст, но когда длина входных данных составляет 3 символа или меньше, я получаю следующее исключение:
Exception in thread "main" java.lang.IllegalArgumentException: input too short
at org.bouncycastle.crypto.fpe.SP80038G.checkLength(Unknown Source)
at org.bouncycastle.crypto.fpe.SP80038G.checkData(Unknown Source)
at org.bouncycastle.crypto.fpe.SP80038G.checkArgs(Unknown Source)
at org.bouncycastle.crypto.fpe.SP80038G.encryptFF1(Unknown Source)
at org.bouncycastle.crypto.fpe.FPEFF1Engine.encryptBlock(Unknown Source)
at org.bouncycastle.crypto.fpe.FPEEngine.processBlock(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedFPEBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
at org.example.AESFPE2.encrypt(AESFPE2.scala:38)
at org.example.AESFPE2.encrypt_test(AESFPE2.scala:25)
at org.example.App$.main(Main.scala:18)
at org.example.App.main(Main.scala)

Метод encrypt_test в следующем коде — это то, что я использую для проверки этой проблемы (остальные методы такие же, как и в ранее упомянутом вопросе):class AESFPE2 {
@throws[Exception]
def encrypt_test(): Unit = {
val key = getKeyFromPassword("foo", "bar")
val tweak = getTweak
val alphabetMapper = new BasicAlphabetMapper("\"'^*[]{}ºª|+-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzáéíóúü!¿?¡=()/\\ _;:,.ç")
val radix = alphabetMapper.getRadix

val plaintext = "abc".toCharArray

val plain_bytes = alphabetMapper.convertToIndexes(plaintext)
val cipher = Cipher.getInstance("AES/FF1/NoPadding", new BouncyCastleProvider())
val cipher_bytes = encrypt(cipher, key, tweak, radix, plain_bytes)
val decrypted = decrypt(cipher, key, tweak, radix, cipher_bytes)
val cipher_chars = alphabetMapper.convertToChars(cipher_bytes)
println(new String(cipher_chars))
val plain_chars = alphabetMapper.convertToChars(decrypted)
println(new String(plain_chars))

}

@throws[NoSuchAlgorithmException]
@throws[InvalidKeySpecException]
def getKeyFromPassword(password: String, salt: String): SecretKey = {
val factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")
val spec = new PBEKeySpec(password.toCharArray, salt.getBytes, 65536, 256)
val secret = new SecretKeySpec(factory.generateSecret(spec).getEncoded, "AES")
secret
}
}


Подробнее здесь: https://stackoverflow.com/questions/769 ... -bouncy-ca
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»