0

我正在使用 java 的 AES 加密和解密。我使用 Appache commons 库将字符串转换为字节,反之亦然。但是当我解密数据时,它与使用相同密钥加密的输入数据不同吗?为什么会这样

这是我的代码:

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));


    }

我得到输出“Thisisjustanexamplc =”,它应该是“这只是一个例子”。我需要在我的代码中更改什么。提前致谢

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 回答