if CalculatedHash <> HashPart then Exit;
// Verify machine binding if MachineIDPart <> GetMachineID then Exit; file activation delphi 2016
Result := True; finally Lines.Free; end; end; In your project source (or main form’s OnCreate ): if CalculatedHash <> HashPart then Exit; // Verify
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; if CalculatedHash <