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 の場合、 Server.CreateObjectを VB6 の新しいオブジェクト文に変更するだけです。

例やドキュメントの翻訳が必要かどうか教えてください。

テキスト ファイルに保存するには、FSO (ファイル システム オブジェクト) を使用できます。

于 2008-11-28T11:54:41.827 に答える
0

これで非常に良い結果が得られましたが、実装はcです

sdbm

このアルゴリズムは、sdbm (ndbm のパブリック ドメイン再実装) データベース ライブラリ用に作成されました。ビットのスクランブリングでうまく機能し、キーの分散が改善され、分割が少なくなることが判明しました。また、たまたま、分散が良好な一般的なハッシュ関数でもあります。実際の関数は hash(i) = hash(i - 1) * 65599 + str[i]; です。以下に含まれるのは、gawk で使用されるより高速なバージョンです。[より高速なダフ デバイス バージョンもあります] 魔法の定数 65599 は、さまざまな定数を試しているときに何もないところから選び出され、素数であることが判明しました。これは、berkeley db (sleepycat を参照) などで使用されているアルゴリズムの 1 つです。

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 に答える