2012년 3월 12일 월요일

Text 및 File 스트림 암호화 (DES)


{
# 파일 인코딩 디코딩 Unit
# DCP Component need;
--------2010_10_27 GHG-------

}


unit Unit_Crypt;

interface

uses
  Classes, Dialogs, SysUtils, DCPdes, DCPsha512;


function EnCodeFile(sFileName: string): boolean;
function DeCodeFile(sFileName: string): boolean;

function EnCodeText(sText : string) : string;
function DeCodeText(sText : string) : string;


implementation

function EnCodeText(sText : string) : string;
var
  oDcp: TDCP_3Des;
begin

  oDcp := TDcp_3Des.Create(nil);
  try
    try
      oDcp.InitStr(AnsiString(blablablabla), TDCP_sha512);
      result := String(oDcp.EncryptString(AnsiString(sText)));
    except      
      result := '';
    end;
  finally
    oDcp.Free;
  end;

end;

function DeCodeText(sText : string) : string;
var
  oDcp: TDCP_3Des;
begin

  oDcp := TDcp_3Des.Create(nil);
  try
    try
      oDcp.InitStr(AnsiString(blablablabla), TDCP_sha512);
      result := String(oDcp.DecryptString(AnsiString(sText)));
    except      
      result := '';
    end;
  finally
    oDcp.Free;
  end;

end;


function EnCodeFile(sFileName: string): boolean;
var
  oDcp: TDCP_3des;
  oMemStrm1, oMemStrm2: TMemoryStream;
begin


  oDcp := TDCP_3des.Create(nil);
  oMemStrm1 := TMemoryStream.Create;
  oMemStrm2 := TMemoryStream.Create;

  try
    oDcp.InitStr(AnsiString(blablablabla), TDCP_sha512);
    oMemStrm1.LoadFromFile(sFileName);
    oDcp.EncryptStream(oMemStrm1, oMemStrm2, oMemStrm1.size);
    oDcp.Burn;
    result := true;
  finally
    FreeAndNil(oDcp);
    FreeAndNil(oMemStrm1);
  end;

  if oMemStrm2.Size > 0  then begin
    oMemStrm2.SaveToFile(sFileName);
    FreeAndNil(oMemStrm2);
  end;

end;

function DeCodeFile(sFileName: string): boolean;
var
  oDcp: TDCP_3des;
  oMemStrm1, oMemStrm2: TMemoryStream;
begin

  oDcp := TDCP_3des.Create(nil);
  oMemStrm1 := TMemoryStream.Create;
  oMemStrm2 := TMemoryStream.Create;
  try
    oMemStrm1.LoadFromFile(sFileName);
    oDcp.InitStr(AnsiString(blablablabla), TDCP_sha512);
    oDcp.DecryptStream(oMemStrm1, oMemStrm2, oMemStrm1.size);
    oDcp.Burn;
  finally
    FreeAndNil(oDcp);
    FreeAndNil(oMemStrm1);
  end;


  if oMemStrm2.Size > 0  then begin
    oMemStrm2.SaveToFile(sFileName);
    FreeAndNil(oMemsTrm2);
    result := true;
  end else begin
    result := false;
  end;

end;


end.