Это мой первый проект на Java, и я решил сделать простой текстовый шифр с использованием AES.Простой AES-шифр в Java
Ошибка я получаю: метод init(int, Key)
в типе Cipher не применяется для аргументов (int, byte[])
Код:
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.Key;
import javax.crypto.*;
import java.util.*;
public class Encryptor {
public static void main(String[] args) throws Exception {
String FileName = "encryptedtext.txt";
String FileName2 = "decryptedtext.txt";
Scanner input = new Scanner(System.in);
System.out.println("Enter your 16 character key here:");
String EncryptionKey = input.next();
KeyGenerator KeyGen = KeyGenerator.getInstance("AES");
KeyGen.init(128);
Cipher AesCipher = Cipher.getInstance("AES");
System.out.println("Enter text to encrypt or decrypt:");
String Text = input.next();
System.out.println("Do you want to encrypt or decrypt (e/d)");
String answer = input.next();
if (answer.equalsIgnoreCase("e")){
byte[] byteKey = (EncryptionKey.getBytes());
byte[] byteText = (Text).getBytes();
AesCipher.init(Cipher.ENCRYPT_MODE, byteKey); // ERROR LINE
byte[] byteCipherText = AesCipher.doFinal(byteText);
Files.write(Paths.get(FileName), byteCipherText);
}
else if (answer.equalsIgnoreCase("d")){
byte[] byteKey = (EncryptionKey.getBytes());
byte[] byteText = (Text).getBytes();
byte[] cipherText = Files.readAllBytes(Paths.get(FileName));
AesCipher.init(Cipher.DECRYPT_MODE, byteKey); // ERROR LINE
byte[] bytePlainText = AesCipher.doFinal(cipherText);
Files.write(Paths.get(FileName2), bytePlainText);
}
}
}
Спасибо заранее! :)
Есть farily хорошие образцы здесь: http://stackoverflow.com/questions/15554296/simple-java-aes-encrypt-decrypt-example , Пожалуйста, используйте футляр для верблюда для ваших соглашений об именах, это помогает :). – GPI
его первый проект java, кстати, попробуйте написать свой первый модульный тест для этого проекта :) –
Общий совет: ** Всегда используйте полностью квалифицированную строку Cipher. ** 'Cipher.getInstance (« AES »); приводят к разным шифрам в зависимости от поставщика безопасности по умолчанию. Это, скорее всего, приводит к '' AES/ECB/PKCS5Padding'', но это необязательно. Если он изменится, вы потеряете совместимость между разными JVM. –