Кодировать Base64 не может найти ошибку символа
Это дает мне ошибку, когда я пытаюсь скомпилировать его в терминале. Распечатывает эту ошибку:
-bash-4.1$ javac CPS3498/HW_Ch2/encrypt.java
CPS3498/HW_Ch2/encrypt.java:9: cannot find symbol
symbol : class Base64
location: package java.util
import java.util.Base64;
^
CPS3498/HW_Ch2/encrypt.java:61: cannot find symbol
symbol : variable Base64
location: class encrypt
String encryptedValue = Base64.getEncoder().encodeToString(encVal);
^
2 errors
Я полностью потерял, как решить эту проблему. Я пробовал разные утилиты Java для компиляции, и все они дают мне почти одинаковую ошибку.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
//create public class encrypt
public class encrypt {
//algorithm AES 128 with a secret key
private static final String ALGO = "AES";
private static final byte[] keyValue =
new byte[] { 'H', 't', 'v', 'b', 'a', 'w', 'e',
'i', 'n', 'v', 'a','l', 't', 'k', 'y', 'e' };
private static BufferedReader reader;
public static void main(String[] args) throws Exception {
//Filereader letter to read from a file letter.txt
FileReader letter = new FileReader("/Users/Shiv/Eclipse/CPS3498_HW/src/letter.txt");
reader = new BufferedReader(letter);
//string text blank, data that stres reader contents.
String text = "";
String data = reader.readLine();
//while loop to see if data is not blank
while (data != null){
text += data;
data = reader.readLine();
}
String textEnc = encrypt(text);
//
File secret = new File("/Users/Shiv/Eclipse/CPS3498_HW/src/secret.txt");
try
{
secret.createNewFile();
}
catch(Exception e)
{
e.printStackTrace();
}
try {
FileWriter secretFile = new FileWriter(secret);
BufferedWriter secretBuff = new BufferedWriter(secretFile);
secretBuff.write(textEnc);
secretBuff.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
//encrypt method
public static String encrypt(String Data) throws Exception {
Key pass = generateKey();
// cipher class to provide the encryption and intialize
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, pass);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = Base64.getEncoder().encodeToString(encVal);
return encryptedValue;
}
//generateKey method to generate a secret key
private static Key generateKey() throws Exception {
Key pass = new SecretKeySpec(keyValue, ALGO);
return pass;
}
}
4 ответа
src: Какая библиотека Java обеспечивает кодирование / декодирование base64?
Ява 6 и 7
Начиная с Java 6 вы можете использовать менее известный класс javax.xml.bind.DatatypeConverter. Это часть JRE, дополнительные библиотеки не требуются.
byte[] message = "hello world".getBytes("UTF-8");
String encoded = DatatypeConverter.printBase64Binary(message);
byte[] decoded = DatatypeConverter.parseBase64Binary(encoded);
System.out.println(encoded);
System.out.println(new String(decoded, "UTF-8"));
Выход
aGVsbG8gd29ybGQ= привет мир
java.util.Base64
доступно с Java 8. Вы компилируете класс с более старой версией Java. javac -version покажет вам, какой вы используете.
У меня была такая же проблема, несмотря на работу на jdk1.8.0_181.
Я получил его для работы со следующим кодом:
import java.util.Base64;
...
byte[] encodedPv = Base64.getDecoder().decode(PRIVATE_KEY);
...
Надеюсь, это поможет кому-то! Ура Манзн
У меня была та же проблема, решение для меня было просто запустить IntelliJ от имени root:
sudo./idea.sh
Это действительно проблема использования более старого Java SDK, чем версия 8.
В некоторых ОС может быть сложно определить, какая версия компилятора /SDK действительно используется.
Можно получить текущую настроенную версию компилятора, выполнив:
javac -version
Это должно вернуть версию 1.8 или новее.