2016-06-07 7 views
0

내가 암호화 ++ libary에서 AES 암호화를 사용하는 것을 시도하고있다 : 암호화 ++ 출력 데이터 길이

CBC_Mode<AES>::Encryption e; 

는 내가 암호화 할 필요가 바이너리 데이터 블록을 가지고있다.

virtual void ProcessData(byte *outString, const byte *inString, size_t length); 

는 입력 데이터의 크기가 마지막 매개 변수 같은데 : 클래스는이 목적을 위해 ProcessData라는 방법을 제공하는 것 같다. 명확하지 않은 것은이 메소드가 암호화 된 데이터의 크기를 반환하지 않는 이유입니다. 출력 데이터 블록의 크기가 입력 데이터 블록의 길이와 정확히 같다고 가정합니까? 입력 데이터의 크기가 단지 1 바이트이더라도 유효합니까? 문안 인사. 마지막 파라미터는 상기 입력 데이터의 크기와 같은

+0

도움 주셔서 감사합니다. 왜 아래 표를 던지겠습니까? 합법적 인 질문이 아닌가? – Peter

답변

1
virtual void ProcessData(byte *outString, const byte *inString, size_t length); 

보인다. 이 방법은 나에게 암호화 된 데이터의 크기를 반환하지 않는 이유는 무엇 명확하지 않다 것은

ProcessData

모든 블록 암호의 주력은 ...입니다 (그러나 오브젝트의 암호 또는 다른 종류의 스트림되지 않음). Crypto ++ 설명서 및 cryptlib.h File Reference도 참조하십시오. cryptlib.h"이 라이브러리에 동일한 인터페이스를 제공하는 추상 기본 클래스"으로 설명됩니다.

ProcessData은 블록 크기의 데이터에서 작동합니다. 따라서 INSIZEOUTSIZE과 같으며 BLOCKSIZE과 같습니다. INSIZE 또는 OUTSIZE이 없습니다. 토론을 위해 사용했습니다. 각 블록 암호는 BLOCKSIZE에 상수를 제공합니다. 등

일반적으로 당신이하지 사용 ProcessData 직접 할 AES::BLOCKSIZE, DES_EDE::BLOCKSIZE이있을 것입니다. 직접 사용할 수 있지만 관련 세부 정보는 모두 사용자가 책임집니다 (자세한 내용은 아래 참조).

일반적으로 StreamTransformationFilter을 사용하지만 그 이유는 쉽게 알 수 없습니다. StreamTransformationFilter은 필요에 따라 입력 버퍼링, 출력 버퍼링 및 패딩을 제공합니다. 그것은 위키의 Init-Update-Final에서 간략하게 논의되었습니다.

여기가 암호화 ++ 위키에 CBC mode 예에서 실제로 보이는 방법 : 위의에서

try 
{ 
    cout << "plain text: " << plain << endl; 

    CBC_Mode<AES>::Encryption e; 
    e.SetKeyWithIV(key, key.size(), iv); 

    // The StreamTransformationFilter adds padding 
    // as required. ECB and CBC Mode must be padded 
    // to the block size of the cipher. 
    StringSource ss(plain, true, 
     new StreamTransformationFilter(e, 
      new StringSink(cipher) 
     ) // StreamTransformationFilter  
    ); // StringSource 
} 
catch(const CryptoPP::Exception& e) 
{ 
    cerr << e.what() << endl; 
    exit(1); 
} 

, CBC_modeStreamTransformationFilter 작업을 함께 당신이 결과를 원하는 제공 할 수 있습니다. CBC_modeProcessData을 호출하고 암호 체이닝 세부 정보를 처리합니다. StreamTransformationFilter은 원하는 크기의 일반 텍스트를 제공합니다. 일반 텍스트가 충분하지 않은 경우 StreamTransformationFilter은 입력시이를 버퍼링합니다. 출력 버퍼가없는 경우 StreamTransformationFilter도 암호 텍스트를 버퍼링합니다.

StreamTransformationFilter은 필요에 따라 패딩을 적용합니다. 기본 채우기가 있지만 재정의 할 수 있습니다. StreamTransformationFilter은 패딩이 필요하고 패딩이 있어야하는 경우 모드 (CBC_mode)를 묻기 때문에 적용 할 패딩을 알고 있습니다.


...출력 데이터 블록의 크기가 입력 데이터 블록의 길이와 정확히 같다고 가정합니까? 입력 데이터의 크기가 단지 1 바이트이더라도 유효합니까?

여기서는 StreamTransformationFilter이 수식에 들어갑니다.

wiki에서 Init-Update-Final을 확인하십시오. Java 또는 OpenSSL 프로그래밍에 익숙하다면 여러분에게 접착제를 제공해야합니다. 그것은 당신을 위해 "그것을 클릭하게"도와야합니다.