Шифрование и дешифрование данных в Delphi: уроки из PHP
Современные требования к безопасности данных требуют использования надежных методов шифрования. Пример кода на PHP, представленный в контексте, демонстрирует использование констант для повышения читаемости и удобства поддержки кода, а также применение HMAC для проверки целостности сообщений. В этой статье мы рассмотрим, как применить подобные принципы в Delphi, используя Object Pascal.
Использование констант
В PHP пример кода использует константы для хранения алгоритмов шифрования и соли. Это хорошая практика, так как позволяет легко изменять параметры шифрования, не внося изменения в основной код функций. Приведем аналогичный пример на Delphi:
program EncryptionExample;
{$DEFINE ALGO_SECRET = 'SHA256'}
{$DEFINE ALGO_MSGAUTH = 'SHA256'}
{$DEFINE ALGO_SSL = 'AES-256-CBC'}
{$DEFINE SALT = 'Bedrock Hordes Staples'}
uses
System.SysUtils,
DCPsha,
DCPcrypt;
function Encrypt(const PlainBytes, const SecretKey: string): string;
var
Hash, HMAC, CipherBytes, IV: TBytes;
begin
Hash := TSHA256.Create.Hash(SecretKey + SALT);
IV := TDCPRandom.Generate(16);
CipherBytes := TDCPEncryption.AES256CBC.Encrypt(PlainBytes, Hash, IV);
HMAC := TSHA256.Create.HashHmac(CipherBytes + IV, Hash);
Result := StringOfBytes(IV) + StringOfBytes(HMAC) + StringOfBytes(CipherBytes);
end;
function Decrypt(const AllBytes, const SecretKey: string): string;
var
Hash, IV, HMAC, CipherBytes: TBytes;
begin
Hash := TSHA256.Create.Hash(SecretKey + SALT);
IV := StringToBytes(StringOfBytes(AllBytes, 16));
HMAC := StringToBytes(StringOfBytes(AllBytes, 32));
CipherBytes := StringToBytes(StringOfBytes(AllBytes, 64));
if not TSHA256.Create.HashHmacEqual(CipherBytes + IV, TSHA256.Create.HashHmac(CipherBytes + IV, Hash)) then
Exit('Payload is tampered/modified/corrupted.');
Result := TDCPEncryption.AES256CBC.Decrypt(CipherBytes, Hash, IV);
end;
function StringOfBytes(const Bytes: TBytes): string;
begin
Result := '';
for var i := Low(Bytes) to High(Bytes) do
Result := Result + Format('%02X', [Bytes[i]]);
end;
function StringToBytes(const Str: string): TBytes;
var
i, Len: Integer;
begin
SetLength(Result, Length(Str) div 2);
Len := Length(Str);
for i := 0 to Length(Result) - 1 do
Result[i] := StrToByte(Str[i * 2 + 1 .. i * 2 + 2]);
end;
function StrToByte(const Str: string): Byte;
begin
Result := StrToIntDef(Str, 0);
end;
begin
// Пример использования функций
var PlainText := 'Secret Message';
var Encrypted := Encrypt(PlainText, 'MySecretKey');
var Decrypted := Decrypt(Encrypted, 'MySecretKey');
Writeln(Decrypted);
end.
Проверка целостности сообщений
HMAC (Hash-based Message Authentication Code) используется для проверки целостности сообщений. В Delphi мы также можем использовать HMAC для обеспечения безопасности данных. Пример кода выше включает проверку целостности в функции Decrypt.
Заключение
Применение констант и проверка целостности сообщений является ключевыми аспектами безопасного шифрования. В этом примере на Delphi мы продемонстрировали, как можно адаптировать PHP-шифрование для использования в среде разработки на Object Pascal, сохраняя при этом важные принципы безопасности.
Приведены примеры кода для шифрования и дешифрования данных в Delphi, переносные из PHP, используя константы и HMAC для обеспечения безопасности и целостности передаваемых данных.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS