加密组件

时间:2012-03-02 09:26:40

标签: delphi encryption delphi-xe delphi-xe2

我需要一个加密库(VCL与否),可以与 Delphi XE2 & unicode字符串
64 & 32位编译。我需要它才能将数据存储在数据库中。

3 个答案:

答案 0 :(得分:9)

Delphi Cryptography Page(DCPCrypt)是由David Barton(davebarton@bigfoot.com)http://www.cityinthesky.co.uk/opensource/dcpcrypt编写的开源库,它提供了一系列非常全面,免费导出的对称密钥加密组件。< / p>

答案 1 :(得分:5)

我在Embarcadero论坛中找到this已由用户更新的DCPCrypt版本
以下是code ,如果有人遇到同样的问题。

我还发现支持Delphi Xe2的library TurboPower LockBox

答案 2 :(得分:1)

所有标准加密算法均以字节或位运行。您应该能够使用任何支持Delphi XE2 Win32和Win64的实现,至少只要您自己负责解码和编码您的unicode字符串。 RTL SysUtils单元中有一个TEncoding类,您应该使用您自己选择的编码将您的unicode字符串转换为TBytes和从TBytes转换。

许多Delphi实现的加密算法采用字符串参数的原因主要是历史性的,不应该理解为实现必然知道字符或字符串是什么。许多Delphi版本之前,在将TBytes类型添加到VCL / RTL之前,有五种方法来声明这样的方法,并且使用字符串通常是最方便的。

  1. 无类型的const和var参数。这是Move过程和TStream使用的。这样做的缺点是最常见的使用错误是尝试传递引用类型变量,例如字符串或动态数组,而不首先解除引用。
  2. 无类型指针。类似的问题。来自例如的开发人员基本或Java背景不一定熟悉指针和引用类型的概念。
  3. 打开数组参数。只能通过元素访问,因此它们与实现在连续内存块上运行的加密算法混合不良。
  4. 特定于库的TBytes =字节类型的数组。 Delphi语言是强类型的,所以这只有在应用程序开发人员使用相同的库特定类型开始时才会起作用,这将很快变得不可行,例如,如果开发人员必须首先从NexusDB数据库中获取TnxBytes,请将其转换为StreamSec tBytes进行加密,然后转换为Indy TIdBytes以通过TIdTCPConnection传递它。
  5. (ANSI)的字符串。面对现实吧。由于上述所有原因(以及其他一些原因,如语言和RTL支持),大多数开发人员使用字符串作为可变大小的内存缓冲区。