2011-09-21 5 views
2

현재 Delphi 6에서 XE로 프로젝트 (암호화를 사용하는)를 변환하는 중입니다. 이 프로젝트는 XE에서 작동하지 않는 오래된 Delphi 암호화 개요를 사용합니다. 그래서 나는 그 구성 요소 세트를 LockBox로 교체 할 것이라고 생각했습니다. 두 가지 버전의 LockBox - 2와 3이 있습니다. Delphi 6에서 LockBox2를 사용할 때 아무런 문제가 없습니다. XE에서는 LockBox3을 사용하지만 문제는 내가 사용할 때 같은 결과를 얻을 수 없다는 것입니다. ExFile 데모 프로그램 (LockBox2에서).TurboPower Lockbox 2를 LockBox 3으로 변환

데모에서 Blowfish 알고리즘을 선택하면 암호를 'testkey'로 설정하고 따옴표없이 프로그램이 파일을 암호화합니다. 델파이 XE에서

, 나는 형태

Codec1: TCodec; 
CryptographicLibrary1: TCryptographicLibrary; 

에 떨어 CryptographicLibrary1에 Codec1을 연결하고 다음 코드가 실행되는 버튼을 클릭하면 (문자열을 해독 LockBox3 사이트에서 유사한 코드를 발견) ...

codec1.StreamCipherId := BlockCipher_ProgId; 
    codec1.BlockCipherId := Blowfish_ProgId; 
    codec1.ChainModeId := ECB_ProgId; 
    codec1.Password := 'testkey'; 
    codec1.encryptFile('d:\tools\mingw\bin\md5.exe', 
    'd:\tools\mingw\bin\md5_xe_2.exe'); 

는하지만 최종 결과는 출력 파일이 LockBox2 ExFile 데모의 것과 다른 크기를 가지고 있다는 것입니다.

그래서 내 질문은 .... 내가 LockBox2에서 ExFile 데모에 다른 결과를 제공하도록 위의 XE 코드에서 잘못했을 무엇

  1. ?

  2. XE에서 LockBox2를 사용해야합니까?

  3. 2와 관련하여 LockBox2 코드 (XE 용)를 찾고있는 사람이 있습니까?

모든 도움을 주시면 감사하겠습니다.

감사합니다,

+1

LockBox2의 결과가 정확합니까? 어떤 라이브러리가 잘못된 결과를 내고 있는지 파악하기 위해 다른 암호화 유틸리티로 테스트 해 보셨습니까? LockBox 3에는 활성 포럼이 있습니다. 그곳에 질문을 해본 적이 있습니까? URL은 다음과 같습니다. http://lockbox.seanbdurkin.id.au/tiki-view_forum.php?forumId=2 – vcldeveloper

+1

XE는 유니 코드를 사용하므로 크기에 영향을 줄 수있는 문자열 처리와 관련이 있습니다. – mj2008

답변

3
  1. 사용자 "mj2008는"머리에 못을했다. Delphi 6은 ansistring을 문자열로 사용합니다. Delphi XE는 UTF-16LE를 사용합니다. 화면에서 렌더링되거나 키보드에서 입력 한 것과 동일한 암호는 완전히 다른 데이텀이므로 당연히 결과가 달라집니다.

예상 파일 크기 Blowfish는 8 바이트 (64 비트) 블록 모드 암호입니다. 다른 체인 모드에서는 다르지만 ECB는 블록 패딩을 사용하여 마지막 블록을 패딩합니다. TPLB3은 ECB에 RFC1321 패딩 방식을 사용합니다. 즉, 전체 블록 크기를 얻기에 충분한 0이 뒤 따르는 하나의 $ 80 바이트로 메시지를 채 웁니다. TPLB2는 다른 체계를 사용합니다. 마지막 바이트까지 0으로 채 웁니다. 마지막 바이트는 팩 블록의 미리 채워진 바이트 수로 설정됩니다.

그래서 일반 텍스트 파일 크기 X 바이트, 당신은 복어와/ECB를 암호화하는 경우, 다음 암호문의 크기 Y가 할 필요가있는 경우 :

Y = X + 8 - (X의 모드 8)

(자세한 내용은 포럼 스레드 참조) http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=154&topics_offset=2&topics_sort_mode=lastPost_desc&forumId=2

* 2 귀하의 프로그램의 목적과 배경에 대해 전혀 알지 못하며,이 특정 상황이이 질문에 영향을 줄 수 있다는주의 사항으로, 귀하의 Delphi XE 프로그램에 TurboPower LockBox 3을 사용하는 것이 좋습니다.이전 LB2 암호문과 상호 운용해야하는 경우 LB2 암호문을 LB3 암호문으로 변환하는 변환 프로그램을 작성하여 일회용으로 실행하십시오. 그런 다음 LB2를 버립니다.

* 3. 나는 LB2를 유지하기를 계속하지만 LB2에서보고 된 주요 결함만을 수정하고 LB2에 RSA 구성 요소를 수정하지 않겠습니다.