在我的应用程序中,我需要在将字符串保存到文本文件之前对其进行哈希处理。有谁知道这是怎么做到的吗?
5 回答
使用 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)
您出于什么目的使用哈希?这很重要,因为某些哈希算法(例如 MD5)适用于某些目的,但不适用于其他目的。
此链接显示MD5 的 VB6 实现。
(评论需要 50 个代表)
Joel 提供的链接很好,但请注意,您需要将种子值更改为标准,以生成与其他人相同的 CRC32:
Optional ByVal Seed As Long = &HEDB88320
希望可以节省其他人 30 分钟的工作时间!
您可以尝试使用 CriptoASP。不要介意名称中的“ASP”,它是一个可以从 VB6 实例化的 ActiveX DLL。它提供了生成随机数、MD2、MD4、MD5 和 SHA 哈希以及某种加密/解密的方法。
您可以从CriptoASP下载它
很抱歉,web 的语言是西班牙语,但我认为您可以通过Doc底部的示例了解 COM 的简单使用。对于 CriptoASP ,只需用 VB6 中的新对象语句更改Server.CreateObject 。
如果您想要翻译示例或文档,请告诉我。
要将其保存到文本文件,您可以使用 FSO(文件系统对象)。
我在这方面取得了非常好的结果,但实施是 c
数据库
该算法是为 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