Я использую Java для создания игрушечной программы, которая шифрует сообщение с помощью шифрования DES. Сообщение, которое я хочу зашифровать:
String msg="This is a secret message";
Который я конвертирую в байты как:
byte [] msgBytes=msg.getBytes();
И отправить его в функцию шифрования, которая работает следующим образом:
//encryption function
public static String encryptMsg(byte [] msgBytes, SecretKey myDesKey) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException
{
Cipher desCipher;
// Create the cipher
desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
byte[] textEncrypted = desCipher.doFinal(msgBytes);
// converts to base64 for easier display.
byte[] base64Cipher = Base64.encode(textEncrypted);
return new String(base64Cipher);
} //end encryptMsg
Затем я отображаю шифр, длину шифра и открытого текста и получаю:
Encrypted Message: FDCU+kgWz25urbQB5HbFtqm0HqWHGlGBHlwwEatFTiI=
Original msg length: 24
Encrypted msg length: 44
Не могли бы вы объяснить мне, почему длина шифра составляет 44, а длина исходного сообщения - 24?
EDIT: Пожалуйста, мне нужен ответ с разъяснениями. Шифр всегда заканчивается на =. Может ли это быть из-за прокладки? Можете ли вы объяснить мне, почему/как получается шифр такой длины? И всегда заканчивается =? Мой код правильный или есть ошибка? У меня есть сомнения в части кодирования.