0

Javaを使用してAES暗号化と復号化を使用しています。また、文字列からバイトへの変換、およびその逆の変換には、Appache コモンズ ライブラリを使用します。しかし、データを復号化すると、同じキーを使用して暗号化された入力データとは異なりますか? なぜそうなのか

これが私のコードです:

public static void main(String[] args) throws Exception {



        String key="this is key";

        String message="This is just an example";

           KeyGenerator kgen = KeyGenerator.getInstance("AES");

           kgen.init(128, new SecureRandom(Base64.decodeBase64(key)));

           // Generate the secret key specs.
           SecretKey skey = kgen.generateKey();

           byte[] raw = skey.getEncoded();

           SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

           Cipher cipher = Cipher.getInstance("AES");

           cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

           byte[] encrypted= cipher.doFinal(Base64.decodeBase64(message));

           String encryptedString=Base64.encodeBase64String(encrypted);

           cipher.init(Cipher.DECRYPT_MODE, skeySpec);

           byte[] original =
             cipher.doFinal(Base64.decodeBase64(encryptedString));

           System.out.println(Base64.encodeBase64String(original));


    }

「これは単なる例です」という出力が得られます。コードで変更する必要があるもの。前もって感謝します

4

1 に答える 1

3

プレーン テキスト メッセージを base-64 でデコードしています。message.getBytes(StandardCharsets.UTF_8)代わりに (または他のエンコード) を使用してバイトに変換する必要があります。Base-64 は暗号化操作の結果をエンコードし、Base-64 デコードしてから復号化します。new String(original, StandardCharsets.UTF_8)復号化操作の結果をテキストに変換するために使用します。

つまり、文字エンコーディングを使用してテキストとバイトを変換します。base-64 エンコードおよびデコードを使用して、バイナリ データをテキスト形式にエンコードします。

于 2012-05-08T14:31:32.107 に答える