java错误中的AES256

java错误中的AES256,java,cryptography,aes,Java,Cryptography,Aes,我正在java小程序中测试AES 256。如果我对代码中的字节[]进行解码,它就可以正常工作。我在编码字符串文本框中以二进制格式打印字节。如果我获取该字符串并解码,我会得到一个异常,因为最后一个块没有正确填充。有什么问题吗 我的代码如下 公共类TestApplet扩展小程序{ 标签lblKey=新标签(“键”); TextField inputLineKey=新的TextField(15); 标签lblString=新标签(“值”); TextField inputLineString=新的T

我正在java小程序中测试AES 256。如果我对代码中的字节[]进行解码,它就可以正常工作。我在编码字符串文本框中以二进制格式打印字节。如果我获取该字符串并解码,我会得到一个异常
,因为最后一个块没有正确填充
。有什么问题吗

我的代码如下


公共类TestApplet扩展小程序{
标签lblKey=新标签(“键”);
TextField inputLineKey=新的TextField(15);
标签lblString=新标签(“值”);
TextField inputLineString=新的TextField(15);
标签lblStringEncoded=新标签(“编码值”);
TextField inputLineStringEncoded=新的TextField(15);
标签lblStringDecoded=新标签(“解码值”);
TextField inputLineStringDecoded=新的TextField(15);
按钮编码按钮=新按钮(“测试加密”);
按钮解码按钮=新按钮(“测试解密”);
公共TestApplet(){
添加(inputLineKey);
添加(lblKey);
添加(inputLineString);
添加(lblString);
添加(inputLineStringEncoded);
添加(lblStringEncoded);
添加(inputLineStringDecoded);
添加(lblStringDecoded);
添加(编码按钮);
添加(解码按钮);
//addActionListener(新的MyActionListener());
}
/**
*将字节数组转换为字符串
* 
*@param buf
*要转换为十六进制字符串的字节数组
*@return生成的十六进制字符串
*/
公共静态字符串asHex(字节buf[]{
StringBuffer strbuf=新的StringBuffer(buf.length*2);
int i;
对于(i=0;i
这就是问题所在:

String originalString = new String(original);
您正在获取不透明的二进制数据,并试图将其解释为一个有效的文本字符串。几乎可以肯定不会。此外,您正在使用系统默认编码对其进行转换,这几乎不是一个好主意

要在文本中表示任意二进制数据,最好使用base64对其进行编码和解码。或者,使用十六进制-您已经有了一种将二进制数据转换为十六进制的方法,所以您可能想要使用它。它比base64稍长,但您可能会发现它更容易处理。

这就是问题所在:

String originalString = new String(original);
您正在获取不透明的二进制数据,并试图将其解释为一个有效的文本字符串。几乎可以肯定不会。此外,您正在使用系统默认编码对其进行转换,这几乎不是一个好主意


要在文本中表示任意二进制数据,最好使用base64对其进行编码和解码。或者,使用十六进制-您已经有了一种将二进制数据转换为十六进制的方法,所以您可能想要使用它。它比base64稍长,但您可能会发现它更容易处理。

您应该用一些合适的文本格式(如十六进制编码或base64)对
byte[]加密的
进行编码。要解密,请再次从文本表示传递到
字节[]

问题在于这些方面:

byte[] original = cipher.doFinal(bi.toByteArray());
String originalString = new String(original);

您必须使用上述编码之一将其编码为字符串。请看一下用于该任务的commons编解码器


您应该将
字节[]加密
编码为一些合适的文本格式,如十六进制编码或base64。要解密,请再次从文本表示传递到
字节[]

问题在于这些方面:

byte[] original = cipher.doFinal(bi.toByteArray());
String originalString = new String(original);

您必须使用上述编码之一将其编码为字符串。请看一下用于该任务的commons编解码器

您试过pas吗