我有一个java应用程序,你在一个文本框中输入一个String,点击加密,它将在一个单独的文本框中显示加密的字符串。我将使用AES encyption。问题是我无法显示加密文本,因为它在字节中,但文本框不会显示字节(只接受字符串)。以下是我的代码中的一个施加。
public static byte[] encrypt(String plainText, String encryptionKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8")));
return cipher.doFinal(plainText.getBytes("UTF-8"));
}
private class HandleThat implements ActionListener{
public void actionPerformed(ActionEvent eve){
JTextField jtf; //user will enter string here
JTextField jtf1; //this will show the encrypted text
plaintext = jtf.getText();
String error = "Error, you must provide some text";
if(eve.getActionCommand().equals("Encrypt")){
if(!jtf.getText().equals("")){
try{
byte[] cipher = encrypt(plaintext, encryptionKey);
for (int i=0; i<cipher.length; i++)
jtf1.setText(cipher[i]); //here is where I get my error
} catch (Exception e) {
e.printStackTrace();}
}else{
label.setText(error);
}
}
错误 - “类JTextComponent中的方法setText无法应用于给定类型; 必需:字符串 发现:字节 原因:实际参数字节不能通过方法调用转换“
转换为String如何将字节从字节更改为字符串?
答案 0 :(得分:2)
答案 1 :(得分:1)
显示字节和字节数组的典型格式是十六进制显示。例如,许多加密应用程序以十六进制格式显示密钥。
您可以使用this SO answer中显示的方法将byte[]
转换为十六进制格式的String
。
答案 2 :(得分:1)
这不是内置于API的,因为通常密码文本包含不可打印的字符。您可能希望将加密文本编码为Base-64,特别是如果用户计划对其执行某些操作(例如在电子邮件中发送)。这将确保所有字符都可打印。