消息编码的可能错误
Possible error of the encoding of a message
我正在尝试制作一个简单的 class,它显示要编码的消息、编码消息和解码消息。但是我认为我的 class 是错误的。这是我对函数的解释所做的:
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==
我认为我的class是错误的,因为要编码的信息只有一个字母组成,但编码后的信息是由26个字母组成的!它不应该也由一个字母组成吗?所以我想如果我得到的是正常的。
感谢所有愿意花时间帮助我的人。
P.S:我将 JDK 12 与 NetBeans 11 一起使用。
所见即所得。
AES 是一种块密码:它以 16 字节的块对数据进行加密。如果输入数据不是 16 字节的偶数倍,则对其进行填充。我希望以某种方式包含数据的原始长度,因此如果在 AES 中加密单个字节的输出比 16 个字节长一点,我不会感到惊讶。
Base64 为输入中的每个 3 字节块输出 4 个字节。在 16 个输入字节中有 6 个这样的块,因此加密消息在 base64 中至少变为 24 字节。
我正在尝试制作一个简单的 class,它显示要编码的消息、编码消息和解码消息。但是我认为我的 class 是错误的。这是我对函数的解释所做的:
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==
我认为我的class是错误的,因为要编码的信息只有一个字母组成,但编码后的信息是由26个字母组成的!它不应该也由一个字母组成吗?所以我想如果我得到的是正常的。
感谢所有愿意花时间帮助我的人。
P.S:我将 JDK 12 与 NetBeans 11 一起使用。
所见即所得。
AES 是一种块密码:它以 16 字节的块对数据进行加密。如果输入数据不是 16 字节的偶数倍,则对其进行填充。我希望以某种方式包含数据的原始长度,因此如果在 AES 中加密单个字节的输出比 16 个字节长一点,我不会感到惊讶。
Base64 为输入中的每个 3 字节块输出 4 个字节。在 16 个输入字节中有 6 个这样的块,因此加密消息在 base64 中至少变为 24 字节。