我想使用给定密钥使用DES加密帧。
我使用的填充样式是PKCS5Padding。如果要添加2个字节,则使用02 02填充字符串,如果要添加3个字节,则使用03 03 03填充8的倍数。 但我的要求是用我的特定字节填充一个字符串。例如,如果要添加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);
答案 0 :(得分:3)
请勿在密码规范中选择PKCS5Padding
。选择NoPadding
。在加密数据之前,您必须自己将填充添加到数据中。在解密之后(也使用无填充),您必须检查最后一个字节,以了解要删除多少字节的填充并自行删除。
基本上,只需编码您所描述的内容。