-1
私はJavaでAESを使用しようとしています。コードスニペットが見つかりましたが、出力が間違っています。出力には多くのEF BF BD
があります。自分のコードに間違っているものが見つかりませんでしたか?JavaのAES暗号が間違っています
public class AES
{
static String encryptionKey = "48C3B4286FF421A4A328E68AD9E542A4";
static String clearText = "00000000000000000000000000000000";
public static void main(String[] args) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
{
encr();
}
public static String toHexString(byte[] ba)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ba.length; i++)
{
sb.append(String.format("%02X ", ba[i]));
}
return sb.toString();
}
public static void encr() throws InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException
{
//Security.addProvider(new com.sun.crypto.provider.SunJCE());
SecretKeySpec secretKey = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
byte[] clearTextBytes = clearText.getBytes("UTF8");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherBytes = cipher.doFinal(clearTextBytes);
System.out.print("enc1: ");
for (int i = 0; i < cipherBytes.length; i++)
{
System.out.print(cipherBytes[i]);
}
System.out.println("");
String cipherText = new String(cipherBytes, "UTF8");
System.out.println("enc2: " + cipherText);
System.out.println("enc3: " + toHexString(cipherText.getBytes("UTF-8")));
}
}
出力は次のようになります。
enc1: 51 72 -122 -57 -109 127 57 85 116 63 -89 -35 55 -72 37 -96 51 72 -122 -57 -109 127 57 85 116 63 -89 -35 55 -72 37 -96 -82 103 -117 -60 -102 -91 -51 55 -53 23 33 -82 -70 -14 74 41
enc2: 3H�Ǔ9Ut?��7�%�3H�Ǔ9Ut?��7�%��g�Ě��7�!���
enc3: 33 48 EF BF BD C7 93 7F 39 55 74 3F EF BF BD EF BF BD 37 EF BF BD 25 EF BF BD 33 48 EF BF BD C7 93 7F 39 55 74 3F EF BF BD EF BF BD 37 EF BF BD 25 EF BF BD EF BF BD 67 EF BF BD C4 9A EF BF BD EF BF BD 37 EF BF BD 17 21 EF BF BD EF BF BD EF BF BD
が、それは
33 48 86 c7 93 7f 39 55 74 3f a7 dd 37 b8 25 a0
enc1とenc2の出力は正しいですか? enc2:toHexString関数のsysout文にのみ問題があるようですね。 –
新しい文字列(cipherBytes、 "UTF8")は何を期待していますか? cipherBytesにAESで暗号化されたデータが含まれ、UTF-8でエンコードされた文字が含まれていない場合に返されますか? – jarnbjo
あなたはすでに必要なものがすべてあると私には見えます。 'toHexString(cipherBytes)' –