尝试在 Inno Setup 中使用文件的哈希值作为密码

问题描述 投票:0回答:1

我正在尝试这样做,以便您只能在 Inno Setup 中继续安装,如果您提供的文件的内容哈希值具有预期值。该文件大约 40 KB。

这是我现在注释掉的代码

[Code]
procedure InitializeWizard;
var Page: TInputFileWizardPage;
begin
  Page := CreateInputFilePage(wpWelcome,
    'Select SMB1 ROM file', 'A legally obtained SMB1 rom is required to proceed & get access to this port',
    'Click "Browse..." and select your SMB1 ROM file, then click Next.');

  Page.Add('&SMB1 ROM file:',
    '.NES|*.nes|.NEZ|*.nez|.UNF|*.unf|.UNIF|*.unif',
    '.nes');
end;

我发现了 MD5 哈希值,但我只是不知道在这里做什么以及如何正确地用它做我想做的事情
https://jrsoftware.org/ishelp/index.php?topic=isxfunc_getmd5ofstring

这个是密码
https://jrsoftware.org/ishelp/index.php?topic=scriptevents&anchor=CheckPassword

请问有经验的人可以帮助我吗?

inno-setup pascalscript
1个回答
2
投票

筛选文档后,这就是我想到的:

[Code]
var Page: TInputFileWizardPage;

procedure InitializeWizard;
begin
  Page := CreateInputFilePage(wpWelcome,
    'Select SMB1 ROM file', 'A legally obtained SMB1 rom is required to proceed & get access to this port',
    'Click "Browse..." and select your SMB1 ROM file, then click Next.');

  Page.Add('&SMB1 ROM file:',
    '.NES|*.nes|.NEZ|*.nez|.UNF|*.unf|.UNIF|*.unif',
    '.nes');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  if CurPageID = Page.ID then begin
    // if GetSHA256OfFile(Page.Values[0]) = '<put in the SHA256 hash here if you''re going to use this>' then
    if GetMD5OfFile(Page.Values[0]) = '<put in the MD5 hash here if you''re going to use this>' then
      Result := True
    else begin
      MsgBox('Please select an actual SMB1 rom.', mbError, MB_OK);
      Result := False
    end;
  end else
    Result := True;
end;

我必须将您使用的变量设置为全局变量,以便您的用例可以访问输入的值。 如果您不知道,我会解释它的作用:

  1. 我们首先初始化要使用的变量,因为如果我们在函数/过程中初始化它们,它们将保留在本地,我们将无法在其他任何地方访问它们。

  2. 然后,我们创建一个页面,要求您在

    InitializeWizard
    过程中提供正确的文件。我们不在那里进行验证。

  3. 然后,当用户单击 NextButtonClick 函数中的

    “下一步”
    时,我们将验证文件。它接受一个数字作为当前页面的 ID,每个页面都有自己的 ID(包括您创建的 ID),我们用它来检查我们是否处于文件提示的页面或我们不存在的另一页面关心验证。 如果当前页面恰好是我们创建的页面,我们从
    Page.Values[0]
    获取文件路径并将其传递给
    GetMD5OfFile
    函数,该函数接收文件路径并返回文件的哈希值(当然是 MD5) 。我将它直接放在
    if
    语句中以保存一行,但如果您愿意,也可以使用单独的
    Hash
    变量。 在该
    if
    语句中,我们检查返回的值是否与我们想要的哈希值匹配(出于法律原因,我不会在此处向您提供哈希值)。 如果是,我们返回
    True
    告诉 Inno Setup 继续,否则显示错误消息并返回
    False
    告诉 Inno Setup 不要继续(并留在页面上)。

该解决方案使用 MD5 作为其哈希值,因为这可能是您想要的,但 MD5 现在被认为是不安全的,不应再使用。 您应该使用 SHA256,方法是使用

GetSHA256OfFile
并根据要验证的文件的 SHA256 哈希检查其结果。它的代码已被注释掉,只需删除两个斜杠及其后面的行即可。

© www.soinside.com 2019 - 2024. All rights reserved.