gpt4 book ai didi

javax.crypto.BadPaddingException : error

转载 作者:行者123 更新时间:2023-11-30 06:36:55 25 4
gpt4 key购买 nike

我正在尝试运行一个简单的加密/解密程序。我收到填充异常。一定有什么隐藏的东西是我不知道的。我基本上加密了一个字符串,将其写入文件,读回,然后解密。原加密数组解密没有问题。我将原始加密数组与从文件中读回的数组进行了比较,它们与我所看到的完全相同。文件中的缓冲区不起作用,所以一定有什么不同。我不知道该怎么办。

import java.security.*;  
import java.security.spec.InvalidKeySpecException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import java.io.*;

public class sample
{
private static String _algo = "AES";
private static byte[] _key = new byte[16];

public static byte[] encrypt (String val) throws Exception
{
Key key = new SecretKeySpec (_key, _algo);
Cipher c = Cipher.getInstance (_algo);

c.init (Cipher.ENCRYPT_MODE, key);

byte[] encode = c.doFinal (val.getBytes());

return encode;
}

public static String decrypt (byte[] val) throws Exception
{
Key key = new SecretKeySpec (_key, _algo);
Cipher c = Cipher.getInstance (_algo);

c.init (Cipher.DECRYPT_MODE, key);

byte[] decode = c.doFinal (val);

String decodeStr = new String (decode);

return decodeStr;
}

public static void main (String[] args) throws Exception
{
String str = "Good bye cruel world";

//
// get password from command line
//
_key = args[0].getBytes();

byte[] encodeArray = sample.encrypt (str);

//
// write encrypted array to file
//
FileOutputStream os = new FileOutputStream ("data");
os.write (encodeArray);
os.close();

//
// decode and print out string
//
String decodeStr = sample.decrypt (encodeArray);
System.out.println ("decodeStr = " + decodeStr);

//
// read back encrypted string
byte[] buffer = new byte[64];
FileInputStream is = new FileInputStream ("data");
is.read (buffer);
is.close();

decodeStr = sample.decrypt (buffer);
System.out.println ("decodeStr = " + decodeStr);
}
}

输出:

java sample 1234567890123456  
decodeStr = Good bye cruel world
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at sample.decrypt(sample.java:32)
at sample.main(sample.java:70)

最佳答案

问题是您正在将文件读入其中的大小为 64 的字节缓冲区太大。将其更改为 32。

或者像这样使用文件的长度:

byte[] buffer = new byte[(int)new File("data").length()];

关于javax.crypto.BadPaddingException : error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4146324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com