1

特定のキーを使用して DES を使用してフレームを暗号化したい。

私が使用しているパディング スタイルは PKCS5Padding です。これにより、2 バイトを追加する場合は 02 02 で文字列がパディングされ、3 バイトを追加して 8 の倍数にする場合は 03 03 03 でパディングされます。しかし、私の要件は、特定のバイトで文字列をパディングすることです。たとえば、2 バイトを追加する場合は 30 30 を追加し、3 バイトを追加する場合は 30 30 30 を追加します (16 進数の 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 に答える