6

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

4

5 回答 5

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)
于 2008-12-12T19:32:14.397 回答
2

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

此链接显示MD5 的 VB6 实现

于 2008-11-28T12:24:30.817 回答
1

(评论需要 50 个代表)

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

Optional ByVal Seed As Long = &HEDB88320

希望可以节省其他人 30 分钟的工作时间!

于 2009-02-18T10:55:20.340 回答
0

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

您可以从CriptoASP下载它

很抱歉,web 的语言是西班牙语,但我认为您可以通过Doc底部的示例了解 COM 的简单使用。对于 CriptoASP ,只需用 VB6 中的新对象语句更改Server.CreateObject 。

如果您想要翻译示例或文档,请告诉我。

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

于 2008-11-28T11:54:41.827 回答
0

我在这方面取得了非常好的结果,但实施是 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
于 2008-11-28T17:01:37.217 回答