Я работаю над шифрованием и расшифровкой паролей для менеджера паролей, используя Java и MySQL для хранения ключа AES вместе с учетными данными пользователя. Я продолжаю сталкиваться с следующим исключением при попытке расшифровать данные: < /p>
javax.crypto.AEADBadTagException: Tag mismatch
< /code>
Вот код для класса AES: < /p>
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import javax.crypto.AEADBadTagException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.GCMParameterSpec;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
public class AESEncryptor
{
private final String ALGORITHM = "AES";
private final String TRANSFORMATION = "AES/GCM/NoPadding";
private final int KEY_SIZE = 256;
private final int IV_SIZE = 12;
private final int TAG_SIZE = 128;
private SecretKey secretKey;
public SecretKey getSecretKey() {
return secretKey;
}
public void setSecretKey(SecretKey secretKey) {
this.secretKey = secretKey;
}
public AESEncryptor()
{
this.secretKey = fetchKey();
}
public String getB64Key()
{
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
public SecretKey fetchKey()
{
try
{
Document doc = Jsoup.connect("https://www.digitalsanctuary.com/aes-key-generator-free").get();
String b64key = doc.getElementsByTag("strong").text();
byte[] keyBytes = Base64.getDecoder().decode(b64key);
return new SecretKeySpec(keyBytes, ALGORITHM);
}
catch (Exception e)
{
e.printStackTrace();
String backupKey = "SU+H7Hwk6M1NJS3NXXzEMRguMrPAoNd+/Gbn1b5ZBHo=";
return new SecretKeySpec(backupKey.getBytes(), ALGORITHM);
}
}
public SecretKey createKeyFromExisting(String aesKey)
{
byte[] keyBytes = Base64.getDecoder().decode(aesKey);
return new SecretKeySpec(keyBytes, ALGORITHM);
}
public String encrypt(String text) throws Exception
{
byte[] iv = new byte[IV_SIZE];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(iv);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(TAG_SIZE, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, gcmParameterSpec);
byte[] cipherText = cipher.doFinal(text.getBytes());
byte[] encryptedData = new byte[iv.length + cipherText.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(cipherText, 0, encryptedData, iv.length, cipherText.length);
return Base64.getEncoder().encodeToString(encryptedData);
}
public String decrypt(String encrypted) throws Exception {
byte[] encryptedData = Base64.getDecoder().decode(encrypted);
byte[] iv = new byte[IV_SIZE];
System.arraycopy(encryptedData, 0, iv, 0, IV_SIZE);
byte[] cipherText = new byte[encryptedData.length - IV_SIZE];
System.arraycopy(encryptedData, IV_SIZE, cipherText, 0, cipherText.length);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(TAG_SIZE, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey, gcmParameterSpec);
byte[] decryptedBytes = cipher.doFinal(cipherText);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
< /code>
Как вы можете видеть из кода, клавиша AES извлекается с веб -сайта, и есть резервный ключ. Теперь, когда ключ был жестким кодированием, все работало нормально, но с тех пор, как я поместил там JSoup, он начал бросать эту ошибку. Br /> гарантировал, что IV хранится и получается правильно: IV генерируется случайным образом во время шифрования и включено в начале зашифрованных данных. < /p>
проверил ключ AES: Я подтвердил, что один и тот же ключ используется как для шифрования, так и для дешифрования. >
Может ли быть, что мой ключ /зашифрованные данные повреждены в базе данных? Или, может быть, они не хранятся правильно с самого начала?
Любая помощь ценится !!>
Подробнее здесь: https://stackoverflow.com/questions/793 ... g-mismatch
Decryption AES-GCM сбой с Aeadbadtagexception: Mancismatch Tag ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1738234449
Anonymous
Я работаю над шифрованием и расшифровкой паролей для менеджера паролей, используя Java и MySQL для хранения ключа AES вместе с учетными данными пользователя. Я продолжаю сталкиваться с следующим исключением при попытке расшифровать данные: < /p>
javax.crypto.AEADBadTagException: Tag mismatch
< /code>
Вот код для класса AES: < /p>
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import javax.crypto.AEADBadTagException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.GCMParameterSpec;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
public class AESEncryptor
{
private final String ALGORITHM = "AES";
private final String TRANSFORMATION = "AES/GCM/NoPadding";
private final int KEY_SIZE = 256;
private final int IV_SIZE = 12;
private final int TAG_SIZE = 128;
private SecretKey secretKey;
public SecretKey getSecretKey() {
return secretKey;
}
public void setSecretKey(SecretKey secretKey) {
this.secretKey = secretKey;
}
public AESEncryptor()
{
this.secretKey = fetchKey();
}
public String getB64Key()
{
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
public SecretKey fetchKey()
{
try
{
Document doc = Jsoup.connect("https://www.digitalsanctuary.com/aes-key-generator-free").get();
String b64key = doc.getElementsByTag("strong").text();
byte[] keyBytes = Base64.getDecoder().decode(b64key);
return new SecretKeySpec(keyBytes, ALGORITHM);
}
catch (Exception e)
{
e.printStackTrace();
String backupKey = "SU+H7Hwk6M1NJS3NXXzEMRguMrPAoNd+/Gbn1b5ZBHo=";
return new SecretKeySpec(backupKey.getBytes(), ALGORITHM);
}
}
public SecretKey createKeyFromExisting(String aesKey)
{
byte[] keyBytes = Base64.getDecoder().decode(aesKey);
return new SecretKeySpec(keyBytes, ALGORITHM);
}
public String encrypt(String text) throws Exception
{
byte[] iv = new byte[IV_SIZE];
SecureRandom secureRandom = new SecureRandom();
secureRandom.nextBytes(iv);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(TAG_SIZE, iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, gcmParameterSpec);
byte[] cipherText = cipher.doFinal(text.getBytes());
byte[] encryptedData = new byte[iv.length + cipherText.length];
System.arraycopy(iv, 0, encryptedData, 0, iv.length);
System.arraycopy(cipherText, 0, encryptedData, iv.length, cipherText.length);
return Base64.getEncoder().encodeToString(encryptedData);
}
public String decrypt(String encrypted) throws Exception {
byte[] encryptedData = Base64.getDecoder().decode(encrypted);
byte[] iv = new byte[IV_SIZE];
System.arraycopy(encryptedData, 0, iv, 0, IV_SIZE);
byte[] cipherText = new byte[encryptedData.length - IV_SIZE];
System.arraycopy(encryptedData, IV_SIZE, cipherText, 0, cipherText.length);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(TAG_SIZE, iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey, gcmParameterSpec);
byte[] decryptedBytes = cipher.doFinal(cipherText);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
}
< /code>
Как вы можете видеть из кода, клавиша AES извлекается с веб -сайта, и есть резервный ключ. Теперь, когда ключ был жестким кодированием, все работало нормально, но с тех пор, как я поместил там JSoup, он начал бросать эту ошибку. Br /> гарантировал, что IV хранится и получается правильно: IV генерируется случайным образом во время шифрования и включено в начале зашифрованных данных. < /p>
проверил ключ AES: Я подтвердил, что один и тот же ключ используется как для шифрования, так и для дешифрования. >
Может ли быть, что мой ключ /зашифрованные данные повреждены в базе данных? Или, может быть, они не хранятся правильно с самого начала?
Любая помощь ценится !!>
Подробнее здесь: [url]https://stackoverflow.com/questions/79399596/aes-gcm-decryption-fails-with-aeadbadtagexception-tag-mismatch[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия