2012-02-28 5 views
7

간단한 텍스트 파일 암호화 기술을 구현하려고하는데 다음 코드를 사용하고 있습니다. 코드는 나에 의해 쓰여지지 않는다, 나는 단지 googled했고, 그것을 얻었다. 암호화 기술은 매우 단순하고 간결하며 구현하기 쉽습니다. 나는 그것이 즉시 암호화와 암호 해독을 할 수있는 단 하나의 기능만을 가지고 있음을 알고있다. 트릭을 수행 할 키를 전달하십시오. 그러나, 나는 단지 키가 사용자에 의해 전달되었는지 여부가 올바른지 아닌지를 확인할 수 있는지 알고 싶었습니다. 현재는 전달 된 키를 기반으로 텍스트 파일을 암호화/해독합니다. 그러나 올바른 키로 해독하는지 확인하는 메커니즘은 없습니다. 우리가 통과 한 열쇠가 무엇이든 암호를 해독 할 수는 있지만 읽을 수는 없습니다. 어떤 생각이 문제를 해결하는 방법 ..?키 기반의 간단한 텍스트 파일 암호화

procedure TEnDeCrypt.EnDecryptFile(pathin, pathout: string; Chave: Word); 
var 
    InMS, OutMS: TMemoryStream; 
    cnt: Integer; 
    C: byte; 
begin 
    InMS := TMemoryStream.Create; 
    OutMS := TMemoryStream.Create; 
    try 
    InMS.LoadFromFile(pathin); 
    InMS.Position := 0; 
    for cnt := 0 to InMS.Size - 1 DO 
     begin 
     InMS.Read(C, 1); 
     C := (C xor not (ord(chave shr cnt))); 
     OutMS.Write(C, 1); 
     end; 
    OutMS.SaveToFile(pathout); 
    finally 
    InMS.Free; 
    OutMS.Free; 
    end; 
end; 
+0

나도 몰라! – jimsweb

+2

그것은 내가 아니었지만 이러한 종류의 암호화는 안전하지 않으며 투자 할 가치가 없습니다. 암호화보다 난독 화입니다. 진정한 질문에 대해서는 비밀 방법을 포함하지 않고 안전하게 인증 할 수있는 진정한 키 시스템이 없으므로 방법이 없습니다. –

+0

Marco에게 감사드립니다. 내가 달성 할 수있는 다른 기법이 있습니까? 난 그냥 사용자가 올바른 키를 입력했는지 확인 싶었어요. 나는 암호화의 힘에 대해 걱정하지 않는다. 그것은 단순한 것일 수 있습니다. – jimsweb

답변

7

해싱 알고리즘을 사용하여 일반 텍스트에 체크섬을 생성하고 암호화 된 파일의 시작 부분에 저장합니다.

해독 된 텍스트를 해싱하여 체크섬이 일치하는지 확인하고 확인할 수 있습니다.

SHA256과 같은 강력한 해시 알고리즘을 사용하여 체크섬을 생성하는 경우 계산 상으로 비용이 많이 들기 때문에 사용자가 무차별 공격을 자동화하는 것이 어려울 수 있습니다.

파일이 손상되지 않도록하려면 암호화 된 파일에 체크섬을 저장하고 파일 헤더에도 저장할 수 있습니다. 그렇지 않으면 잘못된 암호와 잘린 파일을 구별 할 수 없습니다.

일반적으로 여러 소스의 Delphi에서 사용할 수있는 Blowfish 암호화 알고리즘을 사용합니다. 복어는 알려진 약점이없고 비교적 작고 빠릅니다.

+1

+1 –

7

당신은, 당신은 텍스트를 샘플링하고 비 ASCII 또는 문자가 있는지 확인할 수있는 파일 (이 등 이진 파일/텍스트 파일인지)해야합니다 내용의 종류를 알고있는 경우 암호 해독 후 파일에서 예상되지 않습니다.

당신이 할 수있는 또 다른 일은 파일 끝에 워터 마크 텍스트를 추가하는 것입니다. 암호 해독 후, 워터 마크에 예상 데이터 유형 밖에있는 데이터가 포함되어 있는지 확인할 수 있습니다 (문자 만 예상하고 비 문자 데이터가있는 경우 문제가있을 수 있음). 이것은 바보 같은 증거는 아니지만, 당신을위한 완충 장치 일뿐입니다.

즉, 나는이 질문을 할 것이다.이 질문의 배경은 무엇인가? 사용자가 전달하는 키는 암호화하는 것입니다. 그래서 사용자가 유효하지 않은 키를 전달하면 유효하지 않은 결과가 발생합니다. 왜 사용자를 올바른 키쪽으로 조종해야합니까? 이와 같은 비즈니스 유스 케이스가있는 경우 암호화가 매우 쉽게 깨지게된다는 것을 이해해야합니다. 표준 암호화 알고리즘을 선택하여 파일 암호화에 사용하는 것이 좋습니다.

+0

Gangadhar에게 감사드립니다. -이 앱에는 업무용으로 사용할 수 없습니다. 그것은 내 취미 응용 프로그램입니다. 복어에 대한 – jimsweb

2

올바른 방법은 데이터를 암호화 한 다음 인증하는 것입니다. 여기에 관련 토론이 있습니다 : Should we MAC-then-encrypt or encrypt-then-MAC?

일반적인 방법은 먼저 CBC 모드의 AES와 같은 표준 모드에서 표준 암호를 사용한 다음 암호문을 통해 HMAC (예 : HMAC-SHA256)를 계산하는 것입니다. . 암호화와 인증을 모두 수행하는 CCM, EAX, GCM과 같은 일부 암호화 모드도 있습니다.

은 HMAC 대신 해시를 사용하지 마십시오.

당신은 암호화에 사용하는 키는 인증에 사용하는 키 독립적이어야한다. 예 : 모두 랜덤하게 생성하지만, 은 System.Random 함수를 사용하지 않고입니다. Vista SP2 이상에 배포하는 경우 Windows API에서 CryptGenRandom을 사용할 수 있지만 그렇지 않은 경우 암호화 난수 생성을 지원하는 암호화 라이브러리를 사용해야합니다. 당신이 암호 기반 암호화를 사용하는 경우

는 암호화 키 및 인증 키를 유도하는 PBKDF2 구현을 사용합니다. 두 개의 키가 독립적임을 보장하는 네 가지 일반적인 방법이 있습니다.

  • 두 개의 개별 소금 값을 사용하십시오.
  • 단일 소금을 사용하지만 별도의 "라벨"과 연결하십시오 (예 :
  • 두 배 긴 파생 키를 생성하고 암호화 키로 반을 사용하고 인증 키로 나머지 반을 사용하거나
  • 파생 키를 "키 암호화 키 임의로 생성 된 암호화 키와 인증 키를 암호화하는 데 사용합니다. 사람들이 그것을 아래로 투표를하는 이유