Основываясь на ответах на другой вопрос, я пытаюсь зашифровать некоторый текст, но когда длина входных данных составляет 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
Причина ошибки: «слишком короткий ввод» при шифровании (с помощью FPE и надувного замка) в Java/Scala. ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как указать транзитивную зависимость для надувного замка в проекте весенней загрузки Gradle
Anonymous » » в форуме JAVA - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как указать транзитивную зависимость для надувного замка в проекте весенней загрузки Gradle
Anonymous » » в форуме JAVA - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как указать транзитивную зависимость для надувного замка в проекте весенней загрузки Gradle
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-