应使用什么加密算法将文本加密为文本n FreePascal/Delphi?

应使用什么加密算法将文本加密为文本n FreePascal/Delphi?,delphi,encryption,text,freepascal,lazarus,Delphi,Encryption,Text,Freepascal,Lazarus,我需要在使用Lazarus/Freepascal开发的程序中加密一些文本,但我应该能够将它们作为文本加载并解密,而不是以二进制形式,因为我需要将它们保存在TStrings类型属性中 哪种算法适合这种情况?Afaik常用的Delphi dcpcrypt2包在FPC/Lazarus上运行良好 我通常使用Rijndael Freepascal有一个自己的mime编码单元,可以很好地工作,同样在Delphi中,常用的Delphi dcpcrypt2包在FPC/Lazarus上也可以很好地工作 我通常

我需要在使用Lazarus/Freepascal开发的程序中加密一些文本,但我应该能够将它们作为文本加载并解密,而不是以二进制形式,因为我需要将它们保存在TStrings类型属性中


哪种算法适合这种情况?

Afaik常用的Delphi dcpcrypt2包在FPC/Lazarus上运行良好

我通常使用Rijndael


Freepascal有一个自己的mime编码单元,可以很好地工作,同样在Delphi中,常用的Delphi dcpcrypt2包在FPC/Lazarus上也可以很好地工作

我通常使用Rijndael


Freepascal有一个自己的mime编码单元,可以很好地工作。在Delphi中,也可以使用任何合适的加密,然后使用base64 mime编码将其转换为普通字符串,您可以将其存储在普通字符串中

使用任何合适的加密,然后使用base64 MIME编码将其转换为普通字符串,您可以将其存储在普通字符串中

正确的答案是:不要这样做。不要选择对文本进行加密的算法

您需要执行两个步骤:

  • 加密(将文本切碎)
  • 编码(将二进制结果转换为文本)
  • 不管你选择哪种加密方法,重要的是如何将二进制文件转换成文本。这意味着任何加密都可以。你可以选择DCPCrypt,Windows加密-任何东西

    如何将二进制文件转换为文本

    1) 。例如,您可以转义坏字符,这样就不会混淆tstring。选择一个特殊的角色。例如:#1

    现在,要对字符串进行编码,请替换所有#1->1#2、#0->1#3、#13->1#4、#10->1#5。这应该足以让TStrings毫无问题地接受这一点

    解码-按相反顺序:替换#1#5->10、#1#4->13、#1#3->0、#1#2->1

    2) 。或者,您可以使用Base64,正如mj2008所指出的那样。Base64是众所周知的标准。然而,它会产生更多臃肿的文本(与prev.method相比),并且可能工作得更慢(复杂的编码而不是简单的搜索和替换逻辑)


    3) 。或者,您可以只将每个字节写入2个字符:即写入每个字节的十六进制代码(如BinToHex do)。这甚至比base64更臃肿(但可能是最快的一种),但它的优点是比任何其他方法都更易于实现。您甚至不需要编写太多代码,因为Delphi已经有BinToHex/HexToBin例程。

    正确的答案是:不要这样做。不要选择对文本进行加密的算法

    您需要执行两个步骤:

  • 加密(将文本切碎)
  • 编码(将二进制结果转换为文本)
  • 不管你选择哪种加密方法,重要的是如何将二进制文件转换成文本。这意味着任何加密都可以。你可以选择DCPCrypt,Windows加密-任何东西

    如何将二进制文件转换为文本

    1) 。例如,您可以转义坏字符,这样就不会混淆tstring。选择一个特殊的角色。例如:#1

    现在,要对字符串进行编码,请替换所有#1->1#2、#0->1#3、#13->1#4、#10->1#5。这应该足以让TStrings毫无问题地接受这一点

    解码-按相反顺序:替换#1#5->10、#1#4->13、#1#3->0、#1#2->1

    2) 。或者,您可以使用Base64,正如mj2008所指出的那样。Base64是众所周知的标准。然而,它会产生更多臃肿的文本(与prev.method相比),并且可能工作得更慢(复杂的编码而不是简单的搜索和替换逻辑)


    3) 。或者,您可以只将每个字节写入2个字符:即写入每个字节的十六进制代码(如BinToHex do)。这甚至比base64更臃肿(但可能是最快的一种),但它的优点是比任何其他方法都更易于实现。您甚至不需要编写太多代码,因为Delphi已经有BinToHex/HexToBin例程。

    您需要高安全性吗?如果不是,为什么不使用一个简单的Vigenère密码?你需要高安全性吗?如果不是,为什么不使用一个简单的Vigenère密码呢?你甚至可以在加密字符串之前对其进行压缩。我不会这么做的。压缩对随机数据不起作用。你说得对。因此,如果是大量文本,他可以在加密之前对其进行压缩。只是为了补偿base64的开销。你甚至可以在base64加密之前压缩加密字符串。我不会这么做。压缩对随机数据不起作用。你说得对。因此,如果是大量文本,他可以在加密之前对其进行压缩。只是为了补偿base64的开销。Rijndael当然有最好的名字。尽管它的FAQ建议了一个更好的方法——教别人说“Koeieuier”可以提供几个小时的娱乐!(因为他们列出了另一个名字:“Angstschreeuw”!)Rijndael当然有最好的名字。尽管它的FAQ建议了一个更好的方法——教别人说“Koeieuier”可以提供几个小时的娱乐!(因为他们列出了另一个名字:“Angstschreeuw”!)