Java DES加密普通与密码长度
我正在使用Java制作一个玩具程序,使用DES加密对消息进行加密。我要加密的消息是:Java DES加密普通与密码长度,java,encryption,des,encryption-symmetric,Java,Encryption,Des,Encryption Symmetric,我正在使用Java制作一个玩具程序,使用DES加密对消息进行加密。我要加密的消息是: String msg="This is a secret message"; 我将其转换为字节,如下所示: byte [] msgBytes=msg.getBytes(); 并将其发送到加密函数,该函数的工作方式如下: //encryption function public static String encryptMsg(byte [] msgBytes, SecretKey myDesKey) thr
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吗
编辑:
好心的,我需要澄清的答案。密码始终以=。这可能是因为填充物吗?你能给我解释一下为什么/如何得出这个长度的密码吗?并且总是以=?
我的代码是正确的还是有错误?我对编码部分有疑问。有几件事:
msgBytes.length
以获取真正的纯文本长度msgBytes.length
)长度,因为纯文本始终填充有[1,8]字节。要查看真正的加密大小,请参阅textcencrypted.length
对数字
msg.getBytes()
返回ASCII/UTF-8编码序列(如果使用UTF-16或另一种“宽”编码,则下面的数字将太大)msgBytes.length
为24msgBytes.length
mod 8为0,纯文本中填充了8个字节,其值为0x08(根据CKCS#5)textEncrypted.length
是32(24个数据+8个填充)=
),最终结果是44个字符李>
发生了几件事:
msgBytes.length
以获取真正的纯文本长度msgBytes.length
)长度,因为纯文本始终填充有[1,8]字节。要查看真正的加密大小,请参阅textcencrypted.length
对数字
msg.getBytes()
返回ASCII/UTF-8编码序列(如果使用UTF-16或另一种“宽”编码,则下面的数字将太大)msgBytes.length
为24msgBytes.length
mod 8为0,纯文本中填充了8个字节,其值为0x08(根据CKCS#5)textEncrypted.length
是32(24个数据+8个填充)=
),最终结果是44个字符李>
DES加密的结果始终是8字节的倍数。根据指定的填充算法,输入也被填充到8字节的倍数 base 64编码将每3个字节编码为4个字符(3x8=4x6=24),并通过填充=个字符确保输出长度为4的倍数
因此,44个字符的输出对应33个字节,但末尾的=表示实际上只有32个字节。这很好,因为使用PKCS5填充的24字节清除数据将变为32字节。DES加密的结果将始终是8字节的倍数。根据指定的填充算法,输入也被填充到8字节的倍数 base 64编码将每3个字节编码为4个字符(3x8=4x6=24),并通过填充=个字符确保输出长度为4的倍数 因此,44个字符的输出对应33个字节,但末尾的=表示实际上只有32个字节。这很好,因为使用PKCS5填充的24字节清除数据变为32字节