1

我想使用给定密钥使用 DES 加密帧。

我使用的填充样式是 PKCS5Padding。如果要添加 2 个字节,则使用 02 02 填充字符串,如果要添加 3 个字节以形成 8 的倍数,则使用 03 03 03 填充字符串。但我的要求是用我的特定字节填充字符串。例如,如果要添加 2 个字节,则添加 30 30 和 3 个字节,然后添加 30 30 30(十六进制 0 的值为 30)。另外,我必须知道添加了多少填充字节。我应该遵循哪种填充技术以及如何使用它?

以下是我的加密代码:

byte[] keyValue = new byte[]{(byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x16,(byte) 0x05, (byte) 0x12};
myKeySpec = new DESKeySpec(keyValue);
mySecretKeyFactory = SecretKeyFactory.getInstance("DES");
key = mySecretKeyFactory.generateSecret(myKeySpec);


Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
IvParameterSpec iv2 = new IvParameterSpec(new byte[8]);
cipher.init(Cipher.ENCRYPT_MODE, key, iv2);
byte[] plainText = function.HexStringToByteArray(payloadRecv);
byte[] encryptedText = cipher.doFinal(plainText);
4

1 回答 1

3

不要PKCS5Padding在密码规范中选择。选择NoPadding。在加密之前,您必须自己将填充添加到数据中。解密后(同样不使用填充),您必须检查最后一个字节以了解要删除和删除的填充字节数。

基本上,只需按照您的描述编写代码即可。

于 2012-05-17T10:54:29.683 回答