メッセージを暗号化しようとしています。これは機能し、バイト配列として返されます。次に、tcpネットワークメッセージを介して送信するために、このバイト配列を文字列に変換します。一方、文字列をバイト配列に変換し直しますが、結果の配列は大きくなり、理由がわかりません。「MacRoman」を使っているかのようにエンコーディングと関係があるのではないかと思いますが、この問題はありませんが、このエンコーディングをサポートしていないシステムでプログラムを実行できる必要があるため、UTFを使用することにしました。 -8。
String message="222233332221";
//Encrypt message
byte[] encryptedMsg = encryptString(message, temp.loadCASPublicKey());
System.out.println("ENCRYPTED MESSAGE byte Length: "+encryptedMsg.length);
//Convert to String in order to send
String stringMessage = new String(encryptedMsg);
System.out.println("ENCRYPTED MESSAGE String Length: "+stringMessage.length());
//Convert String back to Byte[] and decrpt
byte[] byteMessage = stringMessage.getBytes("UTF-8");
System.out.println("ENCRYPTED MESSAGE byte Length: "+byteMessage.length);
出力:
ENCRYPTED MESSAGEバイト長:256
暗号化されたメッセージ文字列の長さ:235
ENCRYPTED MESSAGEバイト長:446
結果のバイト配列が256バイトではなく446バイトである理由について、誰かが私を正しい方向に向けてください。
暗号化文字列の部分は次のとおりです。これはUTF-8でバイト配列を返すと思いますか?
private static byte[] encryptString(String message, Key publicKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherData = cipher.doFinal(message.getBytes("UTF-8"));
return cipherData;
}