在运行时,vfpencryption71.fll 需要 VC++ 7.1 运行库,而 vfpencryption.fll 需要 VC++ 9.0 运行库。如果您在运行这两个 FLL时出现“FLL is Invalid”错误,就说明您在部署应用程序的系统上缺少相关版本的运行库。大多数 VFP 开发人员都在使用 vfpencryption71.fll,并且它提供与 vfpencryption.fll 完全相同的功能。

下载最新版本的 vfpencryption71.fll(大约 134 KB)

下载最新版本的 vfpencryption.fll(大约 142 KB)


vfpencryption71.fll/vfpencryption.fll 文档 

加密函数ENCRYPT()

签名办法:

Encrypt(cStringtoEncrypt, cSecretKey[, nEncryptionType[, nEncryptionMode[, nPaddingMode[, nKeySize[, nBlockSize[, cIV]]]]]])

参数:

cStringtoEncrypt——您想要加密的纯文本字符串,例如“Hello World!”

cSecretKey——纯文本字符串,加密期间使用的密钥,例如“My_SeCrEt_Key”。
请注意,对于某些类型的加密,密钥可能需要具有特定长度。

nEncryptionType——目前有 5 种可用的加密类型。此参数的值决定了使用的加密类型以及密钥的长度。Visual FoxPro 中的单个字符等于1个字节或 8 位。因此,使用128 位密钥的加密算法需要 16 个字符的密钥 (16 x 8 = 128)。

0 = Rijndael\AES 128(需要 16 个字符的密钥)
1 = Rijndael\AES 192(需要 24 个字符的密钥)
2 = Rijndael\AES 256(需要 32 个字符的密钥)*默认
4 = Blowfish(1 到 56 之间的密钥)字符)
8 = TEA(需要 16 个字符的密钥)
1024 = RC4(密钥可以是任意长度)

nEncryptionMode——上面列出的每种加密类型都有三种不同的模式可用。它们包括:电子密码本 (ECB)、密码块链接 (CBC)、密码反馈块 (CFB) 和输出反馈块。nEncryptionMode 参数不适用于 RC4 加密 (nEncryptionType = 1024)。

0 = ECB *默认
1 = CBC
2 = CFB
3 = OFB

nPaddingMode——对于块密码,cStringtoEncrypt 被填充为算法的块大小的倍数。设置此参数允许您指定如何完成此填充。

0 = 零 (NULL) * 默认
1 = 空格(空格)
2 = PKCS7
3 = ANSI X.923
4 = ISO 10126

nKeySize ——cSecretKey 的大小,以字节(字符)为单位。

nBlockSize —— nEncryptionType 应使用的块大小。

cIV – 应该用于 CBC、CFB 和 OFB 模式的初始化向量 (IV)。此 IV 应与指定的 nBlockSize 总字节数(字符)相匹配。

返回值:

字符数据类型——cStringtoEncrypt 的加密形式。

备注:

将 Encrypt() 函数的返回值保存到表中的字段时,请记住 Visual FoxPro 会将空格附加到字符串的末尾,以便将字符字段填充到指定的长度。这可能会在解密数据时导致问题,因为空格将被视为加密字符串的一部分。要解决此问题,我建议在将加密字符串保存到表时在其末尾放置一个 CHR(0)。然后在解密数据时,只需将 CHR(0) 之前的部分发送到 Decrypt() 函数即可。这不适用于使用 RC4 加密 (nEncryptionType = 1024) 时。


解密函数DECRYPT()


签名方法:

DECRYPT()(cEncryptString, cSecretKey[, nDecryptionType[, nDecryptionMode[, nPaddingType[, nKeySize[, nBlockSize[, cIV]]]]]])

参数:

cEncryptedString ——已使用 Encrypt() 函数加密的字符串。

cSecretKey ——纯文本字符串,与您使用 Encrypt 函数加密数据时使用的密钥相同,例如“My_SeCrEt_Key”。

请注意,对于某些类型的解密,密钥可能需要具有特定长度。

nDecryptionType——目前有 5 种可用的解密类型,它们对应于 Encrypt() 中可用的相同类型。Visual FoxPro 中的单个字符等于 1 个字节或 8 位。因此,需要 128 位密钥的解密算法需要 16 个字符的密钥 (16 x 8 = 128)。

0 = Rijndael\AES 128(需要 16 个字符的密钥)

1 = Rijndael\AES 192(需要 24 个字符的密钥)

2 = Rijndael\AES 256(需要 32 个字符的密钥)*默认

4 = Blowfish(1 到 56 之间的密钥)字符)

8 = TEA(需要 16 个字符的密钥)

1024 = RC4(密钥可以是任意长度) 

nDecryptionMode——上面列出的每种加密类型都有三种不同的模式可用。它们包括:电子密码本 (ECB)、密码块链接 (CBC)、密码反馈块 (CFB) 和输出反馈块。nDecryptionMode 参数不适用于 RC4 解密 (nDecryptionType = 1024)。

0 = ECB *默认

1 = CBC

2 = CFB

3 = OFB


nPaddingMode ——对于块密码,cStringtoEncrypt 被填充为算法的块大小的倍数。设置此参数允许您指定如何

完成此填充。

0 = 零 (NULL) * 默认

1 = 空格(空格)

2 = PKCS7

3 = ANSI X.923

4 = ISO 10126

nKeySize —— cSecretKey 的大小,以字节(字符)为单位。

nBlockSize —— nEncryptionType 应使用的块大小。

cIV —— 应该用于 CBC、CFB 和 OFB 模式的初始化向量 (IV)。此 IV 应与指定的 nBlockSize 总字节数(字符)相匹配。


返回值:

字符数据类型——cEncryptedString 的解密形式后跟可变数量的 CHR(0)。请参阅下面的备注以进一步说明

备注:

重要提示:解密是在内存块上完成的,因此当解密函数返回加密字符串时,它将后跟可变数量的 CHR(0),除非解密字符串恰好在与最后一个块完全相同的位置结束解密。这些无关的 CHR(0) 可以使用许多 Visual FoxPro 函数删除,例如 STRTRAN()、CHRTRAN() 或 LEFT() 和 AT() 的组合。这不适用于使用 RC4 解密 (nDecryptionType = 1024) 时。



文件加密解密、Hash、HashFile、HashRecord、HMAC、CRC、CRCFile、CRCRecord、GenerateKey相关函数的用法,请参照https://www.sweetpotatosoftware.com/blog/index.php/2009/08/09/major-vfp-encryption-update/

发表评论