【问题标题】:Encode a string and save value to file in Inno Setup在 Inno Setup 中对字符串进行编码并将值保存到文件中
【发布时间】:2018-12-12 13:04:10
【问题描述】:

我在 Inno Setup 脚本中有一个 Pascal 脚本代码,用于从用户输入中获取 DBURI,并将其保存到文件中,因此应用程序可以读取此字符串并连接到数据库。

DBURI :=
  'Databaseserver//'+DatabaseUserName+':'+DatabasePassword+'@'+
  Host+':'+Port+'/'+DatabaseName+'"';

SaveStringToFile(dbconf, DBURI, True);

完美运行。但问题是字符串没有加密,任何浏览该文件的人都可以获得数据库密码。我想在 Pascal 脚本代码中使用带有预定义密钥的加密方法,并将输出值(加密字符串)写入文件。 因此,我可以在我的应用程序代码中包含加密方法和密钥来解密值并开始使用 DBURI 字符串。

那么,我的问题是如何在 Pascal 脚本代码中使用带有预定义密钥的加密方法(任何人)? 找了很多Pascal文档的文章但是不知道怎么用?

【问题讨论】:

    标签: encryption inno-setup pascalscript


    【解决方案1】:

    你的问题比较笼统,所以我也笼统地回答一下。

    一些事实:

    • 一般来说,没有真正安全的方法来加密数据(数据库密码),以便可以自动使用它们。即使您使用加密密钥。从二进制文件中检索密钥并不难。特别是 Inno Setup 代码很容易反汇编。见Disassembling strings from Inno Setup [Code]。尽管您似乎愿意接受即使是普通的无密钥 Base64 编码,但您的安全需求可能并不高。

    • 在 Inno Setup(或其 Pascal 脚本代码)中不支持加密。您必须使用外部功能或应用程序。虽然一些简单的编码(不是加密),比如 Base64,可以在 Pascal Script 代码中实现。

    你可以做什么:

    • 如果您将使用与加密数据相同的本地帐户解密数据(同一用户安装和使用该软件),请使用 Windows CryptoAPI。这真的很安全,因为它使用与本地帐户相关联并受帐户密码保护的密钥。但这限制了使用,如前所述。

      Simple AES encryption using WinAPI
      我没有尝试在 Pascal Script 中实现这一点,但我相信它应该是可能的。

      我相信即使使用已知密钥(在安装程序和应用程序之间共享),您也可以使用 CryptoAPI,但我不知道详细信息。

    • 使用已知密钥加密数据的另一种方法是为此调用外部应用程序。您可以使用 PowerShell 和 .NET 类来实现加密。或者,您可以向自己的应用程序添加隐藏功能,您将从 Inno Setup 调用该功能以加密和存储数据。

    • 如果您对 Base64(或者可能是十六进制)编码感到满意,请参阅:
      Encode string to Base64 in Inno Setup (Unicode Version of Inno Setup)

    【讨论】:

    • 所以选择对你来说可行和可接受的解决方案,并提出一个更具体的问题。
    猜你喜欢
    • 2019-03-28
    • 1970-01-01
    • 2019-06-21
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    相关资源
    最近更新 更多