2012-05-17 2 views
1

주어진 키를 사용하여 DES를 사용하여 프레임을 암호화하고 싶습니다.DES를 사용하여 제공된 키를 사용하여 encyption 사용

사용중인 패딩 스타일은 PKCS5Padding입니다. 2 바이트를 추가하려면 02 02로 문자열을 채 웁니다. 8의 배수로 3 바이트를 추가하려면 03 03 03으로 문자열을 채 웁니다. 그러나 제 요구 사항은 특정 바이트로 문자열을 채우는 것입니다. 예를 들어 2 바이트가 추가되면 30 30 및 3 바이트가 추가되고 30 30 30 (16 진수의 값은 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); 
선택하지 마십시오

답변

3

PKCS5Padding :

다음은 암호화 내 코드입니다. NoPadding을 선택하십시오. 암호화하기 전에 패딩을 직접 데이터에 추가해야합니다. 패딩을 사용하지 않고 해독 한 후 마지막 바이트를 검사하여 제거 할 패딩 바이트 수를 직접 확인하고 직접 제거해야합니다.

기본적으로 설명 된대로 정확하게 코드를 작성하십시오.

+2

맞습니다. 데이터와 패딩을 구별 할 수 없으므로 데이터가 30 시간으로 끝나지 않기를 바랍니다. Asker가 설명하는 패딩 메커니즘에 대해 들어 본 적이 없으므로 암호화 API에 포함되지 않습니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 똑같은 것을 시도 할 것이다. – java2485

+1

@ 로버트 : 네, 항상 패딩을 추가하면 패딩이 생깁니다. 그것은 내 의견과 어떤 관련이 있습니까? –