поэтому я создаю игру для своего проекта уровня A, и сейчас я нахожусь на этапе, когда мне нужно иметь возможность шифровать и расшифровывать текстовые файлы.
Я выяснил шифрование с использованием AES-256 в режиме GCM, однако я использую случайно сгенерированный ключ и IV, чтобы в первую очередь зашифровать данные. Поэтому мне было интересно, есть ли способ расшифровать текстовый файл, не зная ключа и iv. В качестве альтернативы, из метода шифрования, показанного ниже, есть ли что-нибудь, что я мог бы изменить, чтобы я знал ключ и iv при расшифровке текста позже.
ПРИМЕЧАНИЕ. Я использую библиотеку libGDX для создания игры, поэтому я не использую стандартный метод записи в текстовый файл.
Метод шифрования:
public void encrypt ()
{
byte[] input = w.getSprites().toString().getBytes(); // Data to be encrypted
byte[] encrypted = null; // Encrypted output
Cipher cipher; // Cipher algorithm to be used
try {
// Setup the cipher algorithm to use and select the wanted mode
// AES is the cipher algorithm GCM is the mode
cipher = Cipher.getInstance("AES/GCM/NoPadding");
// Generate a random key for the encryption
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(256);
SecretKey key = keyGenerator.generateKey();
// Generate a random iv for the encryption
SecureRandom randomSecureRandom = new SecureRandom();
byte[] iv = new byte[cipher.getBlockSize()];
randomSecureRandom.nextBytes(iv);
// Encrypt the data
cipher.init(Cipher.ENCRYPT_MODE, key, randomSecureRandom);
encrypted = new byte[cipher.getOutputSize(input.length)];
int enc_len = cipher.update(input, 0, input.length, encrypted, 0);
enc_len += cipher.doFinal(encrypted, enc_len);
}
catch (NoSuchAlgorithmException |
NoSuchPaddingException |
InvalidKeyException |
ShortBufferException |
IllegalBlockSizeException |
BadPaddingException e) { e.printStackTrace(); }
FileHandle f = Gdx.files.local("bin/default/saves/default/test.txt");
f.writeString(encrypted.toString(), false);
}
Заранее спасибо за любые ответы, они очень ценятся.