Pascal에서 암, PowerPC 또는 기타 이국적인 플랫폼에서 암호화를하려는 경우 올바른 위치에 왔습니다. 델파이 사용자이거나 SHA-3과 같은 더 현대적인 암호 및 해시 알고리즘을 사용하려면 공식 DEC 저장소를 살펴보십시오.
DELPHI 암호화 개요 (DEC)는 Delphi, C ++ Builder 및 Free Pascal의 암호화 라이브러리입니다. 그것은 원래 Hagen Reddmann에 의해 개발되었으며 Arvid Winkelsdorf가 Delphi 2009와 호환되었으며 이제 Free Pascal로 포팅되었습니다.
2008 년 릴리스와 관련하여 다음과 같은 변경 사항이 있습니다.
다음 환경이 테스트되었습니다.
기술적으로 Delphi 7+ 및 FPC 2.6+는 호환 가능해야합니다 (이전 버전에 필요한 매우 작은 변경 사항).
이 프로젝트는 MIT/프리웨어 라이센스에 따라 라이센스가 부여됩니다. 개인적, 상업적 용도로 도서관을 자유롭게 사용할 수 있지만 자신의 위험에 처하게됩니다. 자세한 내용은 라이센스를 참조하십시오.
12 월은 주로 다음 단위로 구성됩니다.
또한 모든 알고리즘에 대한 테스트 사례를 제공하는 가장 dectest 프로젝트가 포함되어 있습니다.
원래 DEC에는 ASN1 및 TypeInfoEX 단위도 포함되어 있습니다. DEC의 핵심 기능에는 필요하지 않으며 포트가 포팅되지 않았습니다. 필요한 경우 이전 릴리스에서 가져 오십시오.
이 모드에 대한 자세한 내용은 deccipher.pas를 확인하십시오.
const
STATIC_KEY: array[0..15] of Byte = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
var
IV: array[0..15] of Byte;
Plaintext: Binary;
Ciphertext: TBytes;
begin
RandomSeed;
Plaintext := 'abcdefghijklmnopqrstuvwxyz';
with TCipher_Rijndael.Create do
try
Mode := cmCBCx;
RandomBuffer(IV, 16);
Init(STATIC_KEY, 16, IV, 16);
SetLength(Ciphertext, Length(Plaintext));
Encode(Plaintext[1], Ciphertext[0], Length(Plaintext));
Done; // only needed when same object will be used for further operations
FillChar(Plaintext[1], Length(Plaintext), 0);
Decode(Ciphertext[0], Plaintext[1], Length(Ciphertext));
Assert(Plaintext = 'abcdefghijklmnopqrstuvwxyz');
finally
Free;
end;
end;
참고 : 일반 텍스트가 패딩되지 않으면 Dec는 CFB8로 마지막으로 잘린 블록을 패드합니다! PKCS 패딩은 12 월에 지원되지 않습니다. 다른 암호화 라이브러리와 함께 DEC를 사용하는 것은 물론 가능하지만 일반 텍스트를 제대로 전처리 (즉, 패드)해야합니다.
또한 참고 : DEC의 이진 유형은 RawByTestring으로 정의됩니다. 유니 코드 환경에있는 경우 (예 : Delphi 2009+), string 유형 변수를 다룰 때 CARE가 권장됩니다. 바이너리를 취하는 함수로 직접 전달하지 마십시오!
var
InputBuf: TBytes;
InputRawStr, Hash: Binary;
begin
SetLength(InputBuf, 4);
FillChar(InputBuf[0], 4, $AA);
Hash := THash_SHA256.CalcBuffer(InputBuf[0], 4, TFormat_MIME64);
// -> 2+0UzrAB0RDXZrkBPTtbv/rWkVR1qboHky0qwFeUTAQ=
InputRawStr := 'My message';
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_HEXL);
// -> acc147c887e3b838ebf870c8779989fa8283eff5787b57f1acb35cac63244a81
Hash := THash_SHA256.CalcBinary(InputRawStr, TFormat_Copy);
// -> Hash contains ac c1 47 ... raw bytes. Can be copied to a 32 bytes array using Move(Hash[1], HashBytes[0], 32);
end;
각 해시 클래스에는 키 파생을위한 KDF2 및 KDFX라는 기능도 있습니다 (예 : 암호에서 세션 키로 사용하기위한).
Writeln(TFormat_MIME64.Encode('My message'));
// -> TXkgbWVzc2FnZQ==
Writeln(TFormat_MIME64.Decode('TXkgbWVzc2FnZQ=='));
// -> My message
Writeln(TFormat_PGP.Encode('Hello, how are you today?'));
// -> SGVsbG8sIGhvdyBhcmUgeW91IHRvZGF5Pw== <line break> =nUAA
Encode 및 Decode는 모두 과부하되어 Unttyped 입력 버퍼를 가져옵니다.