2008-09-26 2 views
1

저는 C++과 Block Cipher 암호화에 익숙합니다. 현재는 AES (16 바이트 시드/16 바이트 블록)에 대한 암호 해독 기능을 작성 중입니다. 모두 잘되고 있지만 총 데이터 크기가 항상 내 블록 크기의 배수는 아닙니다. 내 데이터가 끝날 때 남은 데이터를 처리하는 가장 좋은 방법이 무엇인지 궁금합니다.C++에서 블록 암호를 처리하는 가장 좋은 방법은 무엇입니까? (Crypto ++)

저는 AES 라이브러리에 Crypto ++를 사용하고 있습니다.

ProcessBlock() 함수는 입력 및 출력 문자 배열을 사용합니다. 블록 크기만큼 커야 할 것으로 예상하고 있습니다.

블록 암호에서 16 바이트 블록을 모두 처리 한 다음 남은 데이터를 처리하는 가장 좋은 방법은 무엇입니까?

답변

0

원하는 것은 패딩 시스템입니다.

Check out this CodeProject article on Crypto++

:

메시지가 패딩해야 암호의 블록 크기, ECB 또는 CBC 모드 메시지의 배수가 아니다. 패딩 방법 및 값은 암호화 소스 라이브러리와 API 간의 상호 운용성과 관련된 문제의 근원입니다. Garth Lancaster 이 가리키는 것처럼 패딩에 대해 알고 싶지 않다면 StreamTransformationFilter를 사용하십시오. 이 의 경우 Crypto ++ 필터는 사용자를 패드합니다.

0

거기 wikipedia page를 참조하십시오 "패딩"

라고 무엇을위한 PKCS 표준입니다,하지만 중 하나 패딩 금액 : 암호 해독 원래의 메시지 중

01 
02 02 
03 03 03 
04 04 04 04 
05 05 05 05 05 

당신이 알고있는이 방법 끝 ...

1

단순한 패딩 이상의 의미가 있습니다. 작동 모드가 필요합니다. Good Math, Bad Math 블로그는 그들이 무엇인지, 어떻게 사용하는지에 대한 훌륭한 시리즈를 작성하고 있습니다. here. wikipedia entry도 참조하십시오. 한 가지 사실이 정말로 중요합니다. ECB (전자 코드 북) 모드를 절대 사용하지 마십시오. 각 블록을 독립적으로 암호화합니다. 그것을하는 명백한 방법이지만, 어색한 보안을 제공합니다.

하지만 이상적으로는 직접 해선 안됩니다. 암호화 라이브러리가 제공해야합니다. 그렇지 않다면 나는 다른 것으로 바꿀 것을 제안합니다. OpenSSL처럼.

관련 문제