Java Textbox - 将字节转换为String

时间:2013-03-12 20:22:49

标签: java encryption aes

我有一个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

如何将字节从字节更改为字符串?

3 个答案:

答案 0 :(得分:2)

如果您想要pretty-print byte值数组,请使用:

Arrays.toString(cipher)

如果您希望将密码解释为String,请使用:

new String(cipher)

答案 1 :(得分:1)

显示字节和字节数组的典型格式是十六进制显示。例如,许多加密应用程序以十六进制格式显示密钥。

您可以使用this SO answer中显示的方法将byte[]转换为十六进制格式的String

答案 2 :(得分:1)

这不是内置于API的,因为通常密码文本包含不可打印的字符。您可能希望将加密文本编码为Base-64,特别是如果用户计划对其执行某些操作(例如在电子邮件中发送)。这将确保所有字符都可打印。