Java 消息编码的可能错误

Java 消息编码的可能错误,java,encoding,base64,decoding,Java,Encoding,Base64,Decoding,我试图创建一个简单的类,显示要编码的消息,编码的消息和解码的消息。但是我认为我的课错了。下面是我对函数的解释: String messageToEncode = "a"; try { //We create a key SecretKey key = KeyGenerator.getInstance("AES").generateKey(); // We choose method AES in order to encode message Cipher ci

我试图创建一个简单的类,显示要编码的消息,编码的消息和解码的消息。但是我认为我的课错了。下面是我对函数的解释:

String messageToEncode = "a";

try {
    //We create a key
    SecretKey key = KeyGenerator.getInstance("AES").generateKey();
    // We choose method AES in order to encode message
    Cipher cipher = Cipher.getInstance("AES");
    //We enter the encoding phase of the message
    cipher.init(Cipher.ENCRYPT_MODE, key);
    //We transform the encoded message from String to Byte
    byte[] res = cipher.doFinal(messageToEncode.getBytes());
    //We transform the encoded message from Byte to String. Here we have a coded message that needs the key to be read
    String codedMessage = Base64.getEncoder().encodeToString(res);
    //We enter the decoding phase of the message
    cipher.init(Cipher.DECRYPT_MODE, key);
    //We decode the encoded message
    byte[] res2 = cipher.doFinal(Base64.getDecoder().decode(codedMessage));
    //We display the decoded message
    String decodedMessage = new String(res2);
    //We display the message sent at the beggin
    System.out.println("Message:" + messageToEncode);
    //We display the encoded message
    System.out.println("Encoded message:" + codedMessage);
    //We display the decoded message
    System.out.println("Decoded message:" + decodedMessage);
    //We recover the key 
    byte[] keyByte = key.getEncoded();
    //We display the key
    System.out.println(Base64.getEncoder().encodeToString(keyByte));
} catch (Exception ex) {
}
}

在输出端我有:

Message to code:a
Encoded message:oIgc5kuv8ROgCqNkpndCPQ==
Decoded message:a
u645vsT3RP5FRHLtGfIhrA==
我认为我的类是错误的,因为要编码的消息只由一个字母组成,而编码的消息由26个字母组成!它不应该也由一个字母组成吗?所以我想知道我得到的是否正常

我感谢所有花时间帮助我的人


附言:我将JDK12与NetBeans11一起使用。

您看到的是您应该期望的

AES是一种分组密码:它以16字节的块对数据进行加密。如果输入数据不是16字节的偶数倍,则填充它。我希望以某种方式包含数据的原始长度,因此,如果AES中加密单个字节的输出略长于16字节,我也不会感到惊讶


Base64为输入中每3个字节的块输出4个字节。在16个输入字节中有6个这样的块,因此加密的消息在base64中至少变成24个字节。

您不仅要对其进行编码,还要对其进行加密,然后再对其进行base64编码。为什么您认为加密和编码的消息应该与源具有相同的长度?即使只有base64编码,如果没有加密,也会产生至少3个字符,通常情况下,在我的头脑中,编码似乎等于加密。我很惭愧。。。谢谢你的指点:)