// Rebuild the original data without the hash SetLength(Parts, Length(Parts) - 1); CalculatedHash := THashSHA2.GetHashString(string.Join('|', Parts), SHA256);
if CalculatedHash <> HashPart then Exit; file activation delphi 2016
Here’s a simplified example using Base64 encoding (not secure alone – always use encryption in real apps): // Rebuild the original data without the hash
On activation, your server returns this encoded string as a .key or .lic file. When your application starts, locate the activation file and validate it. Length(Parts) - 1)
uses System.NetEncoding, System.Hash; function GenerateActivationFile(const MachineID, UserEmail: string; ExpireDays: Integer): string; var ExpireDate: TDateTime; RawData, HashData: string; begin ExpireDate := Now + ExpireDays; RawData := Format('%s|%s|%s', [MachineID, UserEmail, DateToStr(ExpireDate)]); HashData := THashSHA2.GetHashString(RawData, SHA256); Result := TNetEncoding.Base64.Encode(RawData + '|' + HashData); // Save Result to a file, e.g., "activation.key" end;
// Verify machine binding if MachineIDPart <> GetMachineID then Exit;
// Optional: Check expiration date if StrToDateDef(Parts[2], 0) < Now then Exit;