Java 解密文件的加密内容时出错

Java 解密文件的加密内容时出错,java,encryption,Java,Encryption,我正在开发一个加密和解密程序,加密工作正常,但解密出错。 我找不到,那代码有什么问题 key.txt ssshhhhhhhhhhh!!!! plaintext.txt naddarbhatia.com public class hello { private static SecretKeySpec secretKey; private static byte[] key; public static void setKey(String myKey) { Message

我正在开发一个加密和解密程序,加密工作正常,但解密出错。 我找不到,那代码有什么问题

key.txt
ssshhhhhhhhhhh!!!!

plaintext.txt
naddarbhatia.com





public class hello {

private static SecretKeySpec secretKey;
private static byte[] key;

public static void setKey(String myKey)
{
    MessageDigest sha = null;
    try {
        key = myKey.getBytes("UTF-8");
        sha = MessageDigest.getInstance("SHA-1");
        key = sha.digest(key);
        key = Arrays.copyOf(key, 16);
        secretKey = new SecretKeySpec(key, "AES");
    }
    catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

public static String encrypt(String strToEncrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
    }
    catch (Exception e)
    {
        System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
}

public static String decrypt(String strToDecrypt, String secret)
{
    try
    {
        setKey(secret);
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    }
    catch (Exception e)
    {
        System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
}

static String readFile(String path, Charset encoding) 
          throws IOException 
        {
          byte[] encoded = Files.readAllBytes(Paths.get(path));
          return new String(encoded, encoding);
        }




public static void main(String[] args) throws IOException
{


    String en_de_flag = args[0];

    String secretKey="";
    try {
        secretKey = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/key.txt",StandardCharsets.UTF_8);
        //System.out.println(secretKey);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    String originalString="";
    String encryptedString="";

    try {
        originalString = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/plaintext.txt",StandardCharsets.UTF_8);
    } catch (IOException e) {

        e.printStackTrace();
    }


    if(en_de_flag.equals("0")) {

        encryptedString = hello.encrypt(originalString, secretKey) ;
        PrintWriter out = new PrintWriter("encrypt.txt");
        out.println(encryptedString);
        System.out.println("Encrypted File Generated !! 'encrypt.txt' , Please check now");
        out.close();
    }

    if(en_de_flag.equals("1")) {

        String decryptedFileContent = readFile("/Users/amulbhatia/Documents/EclipseProjects/HelloProject/src/encrypt.txt",StandardCharsets.UTF_8);

        System.out.println("decryptedFileContent:" + decryptedFileContent);
        System.out.println("Secret Key:" + secretKey);

        String decryptedString = hello.decrypt(decryptedFileContent, secretKey) ;
        //System.out.println("Read Encrypted File, Now Decrypting..");
        //System.out.println(decryptedString);
    }


}}


STACKTRACE

java.lang.IllegalArgumentException: Input byte array has incorrect ending byte at 44
    at java.base/java.util.Base64$Decoder.decode0(Base64.java:771)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:535)
    at java.base/java.util.Base64$Decoder.decode(Base64.java:558)
    at hello.decrypt(hello.java:63)
    at hello.main(hello.java:12
(八)


在命令行中以参数“0”执行上述代码时,将使用加密内容生成encrypt.txt文件,然后当我以参数“1”输入参数时,它读取加密文件“encrypt.txt”和“key.txt”,并在同一函数失败时调用解密函数,pl help

该错误是由Base64解码器引发的,因为您的密文以行结束符结尾,由
PrintWriter
编写


只需
.trim()
您的
decryptedFileContent
(实际上是encryptedfilecontent…)就可以删除换行符。

当您说“函数正在失败”是什么意思?我的意思是函数抛出异常如果您说问题中抛出了哪些异常以及stacktrace上的什么位置,人们可能更容易找到问题。请更改程序以打印stacktrace,然后将stacktrace添加到问题中。请阅读“如何创建堆栈跟踪”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。