2017-03-10 1 views
1

이 질문이 있습니다. 56 비트 키와 64 비트 입력 블록 크기의 DES 암호화가 제공되었습니다.56 비트 DES가 64 비트로 패딩되어 1 바이트 암호 해독 부족

블록 크기는 8 바이트이고 처음 7 바이트를 해독 할 수있었습니다. 그러나 마지막 바이트의 경우 DES는 56 비트이고 64 비트로 채워져 있으므로 해독 된 메시지는 1 바이트가 부족합니다.

그리고 7 번째 루프에 도달 할 때까지 plaintext1은 이미 비어 있으며 1 바이트 부족 상태입니다.

이 문제를 해결할 방법이 있습니까?

편집

String plaintext1 = "ZZZZZZZ"; 
//removed line 
System.out.println(Arrays.toString(plaintext1 .getBytes())); 
System.out.println(plaintext1); 

public static byte[] paddingBytes(byte[] input, int blockSize) { 
    int paddingSize = (blockSize - (input.length % blockSize)) % blockSize; 
    byte[] padding = new byte[paddingSize]; 
    return concat(input, padding); 
} 
+1

자세한 도움말은 코드 및 데이터를 제공하십시오. – zaph

+0

@zaph 질문이 업데이트되었습니다. 이 코드는 내 과제이므로 코드를 게시 할 수 없으므로 유감스럽게 생각하며 표절을 두려워하므로 개념을 설명 할 수 있습니다. – guest176969

+0

@zaph 아이디어가 있습니까? – guest176969

답변

2

DES는 8 바이트로, 각 바이트의 최하위 비트가 각 바이트의 패리티를 검증에 이용 될 수 있기 때문에 인코딩 된 56 비트의 키를 가지고 있지만 사용되지 암호 자체로.

DES는 블록 지향 암호화 방법이므로 입력 데이터는 블록 크기의 정확한 배수 (8 바이트)가되어야합니다. 입력 데이터 크기가 정확한 배수가 아니면 패딩해야합니다. 패딩이 필요한 경우 암호화 전에 추가하고 암호 해독 후 제거해야합니다. 평소 패딩은 PKCS#5입니다. 일반적으로 패딩 모드는 ECB 또는 CBC 작동 모드를 사용하는 블록 암호에 대해 구성 할 수 있습니다.

plainttext 크기를 계산할 수없고 마지막 바이트에 값이있을 수있는 경우 항상 패딩을 적용해야합니다. 입력 크기가 블록 크기의 정확한 배수 일 때도 마찬가지입니다. 그렇지 않으면 마지막 바이트가 암호 해독 후 패딩이나 일반 텍스트로 구성되었는지 여부를 알 수 없습니다.

+0

좋은 답변이지만 다소 어리 석다는 것을 알았 기 때문에 문언을 크게 바꿨습니다. zaph, 내가 엉망이 됐는지 확인해볼 수 있니? 편집 내용에 동의하지 않으면 롤백 할 수 있습니다. 어쩌면 키 크기와 블록 크기 사이에 직접적인 연결이 없다는 것을 나타내는 것이 좋습니다. 그렇지 않으면이 주석으로 처리했습니다.) –

+0

평상시처럼 Maarten이 내가 분명하다는 것이 확실합니다! – zaph