私は現在、常に同じキーを使用してソリューションを作成するためにCipherでプレイしています。私はこれが最も安全な解決策ではないことを知っていますが、私に求められていることです。私はAES256とEBCを使用するはずですが、正しく暗号化できません。問題は未知の文字があることです。暗号化Javaが正しく暗号化されない
private static String encrypt(String text) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchProviderException
{
String keyString = AESEncryption.convertToUTF8("8DJE7K01U8B51807B3E17D21");
text = AESEncryption.convertToUTF8(text);
byte[]keyValue = Base64.getEncoder().encode(keyString.getBytes(StandardCharsets.UTF_8));
Key key = new SecretKeySpec(keyValue, "AES");
Cipher c1 = Cipher.getInstance("AES/ECB/PKCS5Padding");
c1.init(Cipher.ENCRYPT_MODE, key);
byte[] encodedText =Base64.getEncoder().encode(text.getBytes(StandardCharsets.UTF_8));
System.out.println("Encoded text: "+new String(encodedText,StandardCharsets.UTF_8));
byte[] encVal = c1.doFinal(encodedText);
System.out.println("Encoded val: "+new String(encVal,StandardCharsets.UTF_8));
return new String(encVal);
}
編集:申し訳ありませんが、初めて尋ねます。私はあなたにすべての範囲を与えます。その後、私は次のコードで解読しようとします(私は繰り返しコードがあることを知っています、私はそれをきれいにするでしょう)。しかし、暗号化メソッドで得られた出力を解読すると、次のエラーが発生します。私は、暗号化と復号化しようとしているメッセージは、「はいはい」である
public static String desEncrypt(String text) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
String keyString = AESEncryption.convertToUTF8("8DJE7K01U8B51807B3E17D21");
byte[] keyValue = Base64.getEncoder().encode(keyString.getBytes(StandardCharsets.UTF_8));
Key key = new SecretKeySpec(keyValue, "AES");
Cipher c1 = Cipher.getInstance("AES/ECB/PKCS5Padding");
c1.init(Cipher.DECRYPT_MODE, key);
byte[] encodedText = Base64.getDecoder().decode(text.getBytes(StandardCharsets.UTF_8));
byte[] encVal = c1.doFinal(encodedText);
System.out.println(new String(encodedText));
return new String(encVal,StandardCharsets.UTF_8);
}
とエラー:
Encoded text: aG9sYWNraXNqbWRlaXJncw==
Encoded val: ???D>??|??i9???Fd?\Zz?A?-
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character -3d
at java.util.Base64$Decoder.decode0(Unknown Source)
at java.util.Base64$Decoder.decode(Unknown Source)
at AESEncryption.desEncrypt(AESEncryption.java:63)
at AESEncryption.main(AESEncryption.java:79)
はどうもありがとうございました、そして
ようこそスタックオーバーフロー!もし私が聞くことができるなら、あなたの質問は何ですか?次のhttps:// stackoverflowをお読みください。com/help/how-to-askと他の人に役立つ情報を追加しようとします。あなたの問題は些細なように思えますが、リンクごとに情報を追加することは非常に便利です。 – amn
はい、そうです。すべてのバイトシーケンスは、有効なUTF8エンコードされた文字シーケンスを表していません。そして、すべての文字はあなたには知られていません。なぜならそれらの文字はかなり多いからです。 「よく知られている」英字だけを使用して印刷可能な文字列を使用する場合は、Base64エンコーディングを使用してバイト配列を変換します。 –
ありがとう、私は問題の完全な範囲を含めました。今はすべてがより明確になることを願っています。 –