1

テキストボックスに文字列を入力して暗号化を押すJavaアプリケーションがあり、暗号化された文字列が別のテキストボックスに表示されます。これにはAES暗号化を使用します。問題は、暗号化されたテキストをバイト単位で表示できないのに、テキストボックスにバイトが表示されないことです(文字列のみを取得します)。以下は私のコードからの成果です。

 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を特定の型に適用できません。必須:文字列が見つかりました:バイトの理由:メソッド呼び出し変換によって実際の引数バイトを文字列に変換できません」

暗号をバイトから文字列に変更するにはどうすればよいですか?

4

3 に答える 3

2

値の配列をきれいに印刷したい場合は、次byteを使用します。

Arrays.toString(cipher)

暗号をとして解釈する場合はString、次を使用します。

new String(cipher)

于 2013-03-12T20:30:48.217 に答える
1

バイトとバイト配列を表示するための一般的な形式は、16進表示です。たとえば、多くの暗号化アプリケーションは、キーを16進形式で表示します。

このSO回答に示されている方法を使用byte[] してString、16進形式に変換できます。

于 2013-03-12T20:42:59.547 に答える
1

通常、暗号文には印刷できない文字が含まれているため、これはAPIに組み込まれていません。暗号化されたテキストをBase-64としてエンコードすることをお勧めします。特に、ユーザーがそれを使って何かをする予定がある場合(電子メールで送信するなど)。これにより、すべての文字が印刷可能になります。

于 2013-03-12T21:23:13.590 に答える