2010-03-12 3 views
2

Java에서 AES CBC 암호화를 수행하려고합니다. javax.crypto을 사용하고 있습니다. Cipher을 초기화 한 후 올바르게 암호화하려면 clear 바이트에 doFinal 만 전화하면됩니까? 또는 update으로 무엇인가를해야합니까? ,javax.crypto AES 암호화 - doFinal 만 호출하면됩니까?

는 복수의 부분으로부터 완성되는 암호화 또는 복호화 조작

과의 doFinal

에서 암호화를 계속하거나 단일의 부분으로부터 완성되는 조작으로 데이터를 해독 :

문서 갱신 말한다 또는 완료 다중 부분 작업

다중 부분 암호화 란 정확히 무엇을 의미합니까?

답변

5

doFinal은 마지막 블록에 PKCS7 padding을 추가합니다. 따라서 update 0을 여러 번 호출 할 수는 있지만 마지막 호출은 doFinal이어야합니다. 멀티 파트 암호화는 데이터가 메모리에서 연속적이지 않을 때입니다. 일반적인 예는 소켓에서받은 버퍼입니다. 암호를 설정 한 다음 update를 호출하여 데이터를 암호화 또는 해독하고 블록 단위로 차단하고 업데이트로 반환 된 블록을 추가하여 암호화 된/해독 된 데이터를 작성합니다. 마지막 입력 블록에서 doFinal을 호출하고 반환 된 블록이 출력 데이터에 추가되는 마지막 블록입니다. ecnrypting에서 doFinal은 패딩을 추가합니다. 해독 할 때 doFinal은 패딩을 확인하고 제거합니다.

+0

그래서 바이트 배열을 BLOCKSIZE 크기의 덩어리로 분리하고 마지막 블록을 제외한 각 블록에서 업데이트를 호출하고 마지막 블록에서 doFinal을 호출해야합니까? 또는 나는 모든 일에 대해 최종 결정을 내릴 수 있습니까? 그것은 나를 위해 모든 것을 할 것입니까? – Kyle

+3

데이터가 인접하지 않으면 여러 업데이트 만 수행하면됩니다. 이미 하나의 연속 블록에이 블록이 있으면 doFinal을 한 번 호출하면됩니다. –

+1

아, 알겠습니다. 암호화를 멀티 파트로 사용하는 이유는 모든 데이터를 완전히받을 때까지 기다리지 않고 데이터를받는 즉시 암호화를 시작하기를 원하기 때문입니다. – Kyle

관련 문제