К сожалению, я не очень знаком с криптографией, но мне нужно реализовать этот алгоритм в java8.Это означает, что у меня уже есть некоторые данные, зашифрованные с помощью этого подхода, написанные на C, и ключ, который является 256-битным, и мне нужно расшифровать эти данные, используя некоторый код Java.Обратите внимание, что все, что мы имеем в подходе Эрдельского, является ключом, здесь нет «соли» и «вектора инициализации» (по крайней мере, явно, но я могу ошибаться).
Что я пробовал?Ну, немного:
- Я пытался BouncyCastle , но он не может расшифровать мои данные (он использует 'iv', я установил все ноль, поэтому это может быть проблемой)
Я использую Java 1.8.112 Я получил исключение «Недопустимый размер ключа или параметры по умолчанию», и я попытался Взломать мой JDK , чтобы он работал с 256-битными ключами,(он также использует 'iv'), но он также не может расшифровать мои данные.Код следующий:
public static void DecryptData(byte[] Contents, int NumBytes, byte[] KeyBytes, int KeyOffset, int NumKeyBytes)
{
final int AESBlockSize = 16;
final byte[] EncryptionDecryptionBuffer = new byte[AESBlockSize];
final byte[] InitializingVector = {
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0
};
try
{
final Cipher AES256Cipher = Cipher.getInstance("AES/CBC/NoPadding");
final SecretKeySpec secretKeySpec = new SecretKeySpec(KeyBytes, KeyOffset, NumKeyBytes, "AES");
AES256Cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(InitializingVector));
// Decrypt the data a block at a time
for (int Offset = 0; Offset < NumBytes; Offset += AESBlockSize)
{
// Update and copy to the EncryptionDecryptionBuffer
AES256Cipher.update(Contents, Offset, AESBlockSize, EncryptionDecryptionBuffer);
// Copy to the initial array
System.arraycopy(EncryptionDecryptionBuffer, 0, Contents, Offset, AESBlockSize);
}
}
catch (GeneralSecurityException e)
{
throw new RuntimeException(e);
}
}
Я все еще ищу решение, пожалуйста, помогите.Благодаря.