在我的应用程序中,我需要在将字符串保存到文本文件之前对其进行哈希处理。有人知道如何做吗?
您使用哈希的目的是什么?这很重要,因为一些哈希算法(如MD5)适合某些用途,但不适合其他用途。
此链接显示了MD5的VB6实现。
CAPICOM是用于获取哈希值的示例
将CAPICOM.DLL
添加为项目引用
uses
DIM key As String
DIM sValue As String
Dim sEncrypedValue as String
Dim oCAP As CAPICOM.EncryptedData
Set oCAP = New CAPICOM.EncryptedData
With oCAP.
.Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS
.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4
.SetSecret key
.Content = sValue
end with
sEncrypedValue = objCAP.Encrypt(CAPICOM_ENCODE_BASE64)
To Decrypt:
oCAP.SetSecret key
oCAP.Content = sEncrypedValue
sValue = oCAP.Decrypt(CAPICOM_ENCODE_BASE64)
Joel提供的链接很好,但请注意您需要将种子值更改为标准值,以便产生与其他人相同的CRC32值:
Optional ByVal Seed As Long = &HEDB88320
你可以尝试使用CriptoASP。不要在名称中关注“ASP”,它是一个ActiveX DLL,你可以从VB6实例化它。它提供了生成随机数、使用MD2、MD4、MD5和SHA进行哈希以及某种加密/解密的方法。
你可以从CriptoASP下载它。
很抱歉,网页语言是西班牙语,但我认为你可以通过底部的CriptoASP文档中的示例轻松理解COM的使用,只需在VB6中将Server.CreateObject更改为新对象语句即可。
如果你需要示例或文档的翻译,请告诉我。
要将其保存到文本文件中,你可以使用FSO(文件系统对象)。
我已经使用这个算法取得了非常好的结果,但实现是c语言
sdbm
这个算法是为sdbm(ndbm的公共领域重新实现)数据库库创建的。它被发现在混淆位方面表现良好,导致键的分布更好,减少了分裂。它也恰好是一个具有良好分布的好的通用哈希函数。实际函数是hash(i) = hash(i - 1) * 65599 + str[i];下面包含的是gawk中使用的更快版本。[甚至还有一个更快的duff-device版本]魔术常数65599是在尝试不同常数时从空气中挑选出来的,并且是一个质数。这是Berkeley DB(请参见Sleepycat)和其他地方使用的算法之一。
static unsigned long
sdbm(str)
unsigned char *str;
{
unsigned long hash = 0;
int c;
while (c = *str++)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}
将其移植到VB,计算过程大致如下。 基本上,它从左到右遍历字符串的字符,计算哈希值为
newHash = the character (c) + (previousHashValue * 2^6) +
(previousHashValue * 2^16) -
previousHashValue**
previousHashValue = newHash