Visual Basic 6.0哈希函数

6
在我的应用程序中,我需要在将字符串保存到文本文件之前对其进行哈希处理。有人知道如何做吗?

你应该表明哈希的目的,比如隐藏密码、允许搜索等。 - PhiLho
5个回答

2

您使用哈希的目的是什么?这很重要,因为一些哈希算法(如MD5)适合某些用途,但不适合其他用途。

此链接显示了MD5的VB6实现


链接已失效。损坏了。@RoadWarrior - Ahmad
@Ahmad,我已经修复了链接。 - HTTP 410

2

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)

1

Joel提供的链接很好,但请注意您需要将种子值更改为标准值,以便产生与其他人相同的CRC32值:

Optional ByVal Seed As Long = &HEDB88320

希望这能为其他人节省30分钟的工作时间!

0

你可以尝试使用CriptoASP。不要在名称中关注“ASP”,它是一个ActiveX DLL,你可以从VB6实例化它。它提供了生成随机数、使用MD2、MD4、MD5和SHA进行哈希以及某种加密/解密的方法。

你可以从CriptoASP下载它。

很抱歉,网页语言是西班牙语,但我认为你可以通过底部的CriptoASP文档中的示例轻松理解COM的使用,只需在VB6中将Server.CreateObject更改为新对象语句即可。

如果你需要示例或文档的翻译,请告诉我。

要将其保存到文本文件中,你可以使用FSO(文件系统对象)。


0

我已经使用这个算法取得了非常好的结果,但实现是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

shl(<<)的整个目的是避免使用相对较慢的乘以65599。 VB端口有两个乘法。 这样做会更快:newHash =字符(c) +(previousHashValue * 65599) - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接