web-dev-qa-db-ja.com

エンコード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;
}
}
8
Shiv Patel

src: どのJavaライブラリはbase64エンコード/デコードを提供しますか?

Java 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 = hello world

4
uday

Java.util.Base64は、Java 8.以降利用可能です。クラスを古いJavaバージョンでコンパイルしています。javac -versionが表示されますどちらを使用しているか。

3
Magnilex

Jdk1.8.0_181で実行しているにもかかわらず、同じ問題が発生しました。

私はそれを次のコードで動作させるようにしました:

import Java.util.Base64;

...

byte[] encodedPv = Base64.getDecoder().decode(PRIVATE_KEY);

...

これが誰かを助けることを願っています!乾杯のマン

1
Manzn

同じ問題がありましたが、解決策はrootとしてIntelliJを実行することでした:

Sudo ./idea.sh

0
Carlos ABS

これは確かに、バージョン8より古いJava SDKを使用する場合の問題です。

一部のOSでは、実際に使用されているコンパイラ/ SDKのバージョンを特定するのが難しい場合があります。

次のコマンドを発行すると、現在構成されているコンパイラのバージョンを取得できます。

javac -version 

これにより、バージョン1.8以降が返されます。

0
Yuri