在Inno Setup中对字符串进行编码并将值保存到文件

时间:2018-12-12 13:04:11

标签: encryption inno-setup pascalscript

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

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

SaveStringToFile(dbconf, DBURI, True);

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

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

1 个答案:

答案 0 :(得分:1)

您的问题相当广泛,因此我也将广泛回答。

一些事实:

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

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

您可以做什么:

  • 如果要使用与加密数据相同的本地帐户解密数据(同一用户安装并使用该软件),请使用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)