2008-11-28 69 views
5

Trong ứng dụng của tôi, tôi cần băm chuỗi trước khi tôi lưu nó vào một tệp văn bản. Có ai biết làm thế nào để làm điều đó?Hàm băm Visual Basic 6.0

+0

Bạn nên cho biết mục đích của băm, như giấu mật khẩu, cho phép tìm kiếm, v.v. – PhiLho

Trả lời

0

Bạn có thể thử với CriptoASP. Đừng bận tâm về 'ASP' trong tên, đó là một ActiveX DLL bạn có thể khởi tạo từ VB6. Nó cung cấp các phương thức để tạo ra các số ngẫu nhiên, băm với MD2, MD4, MD5 và SHA và một số loại mã hóa/giải mã.

Bạn có thể tải nó từ CriptoASP

Tôi xin lỗi, ngôn ngữ web là ở Tây Ban Nha, nhưng tôi nghĩ bạn có thể undertand việc sử dụng rất dễ dàng của COM với các ví dụ ở dưới cùng của Doc. for CriptoASP, chỉ cần thay đổi máy chủ .CreateObject với câu đối tượng mới trong VB6.

Hãy cho tôi biết nếu bạn muốn dịch một ví dụ hoặc tài liệu.

Để lưu tệp vào tệp văn bản, bạn có thể sử dụng FSO (Đối tượng hệ thống tệp).

2

Vì mục đích gì bạn đang sử dụng hàm băm? Điều này quan trọng bởi vì một số thuật toán băm như MD5 phù hợp cho một số mục đích, nhưng không phù hợp với các mục đích khác.

Liên kết này hiển thị VB6 implementation of MD5.

+0

Liên kết không còn giá trị. Bị hỏng. @RoadWarrior – Ahmad

+0

@Ahmad, tôi đã sửa liên kết. – RoadWarrior

0

tôi đã có kết quả rất tốt với thế này, nhưng việc thực hiện c

sdbm

thuật toán này đã được tạo ra cho sdbm (một reimplementation công lĩnh vực ndbm) thư viện cơ sở dữ liệu. nó đã được tìm thấy để làm tốt trong việc xáo trộn các bit, gây phân phối tốt hơn các khóa và chia tách ít hơn. nó cũng xảy ra là một hàm băm chung tốt với phân phối tốt. hàm thực tế là băm (i) = băm (i - 1) * 65599 + str [i]; những gì được bao gồm dưới đây là phiên bản nhanh hơn được sử dụng trong gawk. [thậm chí còn có một phiên bản nhanh hơn, duff-device] hằng số phép thuật 65599 được chọn ra khỏi không khí mỏng trong khi thử nghiệm với các hằng số khác nhau, và hóa ra là một nguyên tố. đây là một trong các thuật toán được sử dụng trong db berkeley (xem sleepycat) và ở nơi khác.

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; 
} 

Để chuyển nó sang vb, tính toán sẽ diễn ra như thế này. Về cơ bản nó đi qua các ký tự của chuỗi từ trái sang phải, tính toán hash như

newHash = the character (c) + (previousHashValue * 2^6) + 
           (previousHashValue * 2^16) - 
           previousHashValue** 
previousHashValue = newHash 
+0

Toàn bộ điểm của shl (<<) là tránh sử dụng nhân với 65599 tương đối chậm. Cổng VB có HAI phép nhân. Sẽ nhanh hơn khi thực hiện việc này: newHash = ký tự (c) + (previousHashValue * 65599) – Steve

2

Ví dụ về sử dụng CAPICOM để có được một băm

Thêm CAPICOM.DLL làm tham chiếu dự án

sử dụng chìa khóa DIM As String DIM sValue As String

Dim sEncrypedValue như String

Dim OCAP Như CAPICOM.EncryptedData Set OCAP = New CAPICOM.Mã hóaData

Với oCAP. .Algorithm.KeyLength = CAPICOM_ENCRYPTION_KEY_LENGTH_56_BITS .Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_RC4
.SetSecret chính .Content = sValue cuối với

sEncrypedValue = objCAP.Encrypt (CAPICOM_ENCODE_BASE64)

Để Giải mã: oCAP.SetSecret key oCAP.Content = sEncrypedValue sValue = oCAP.Decrypt (CAPICOM_ENCODE_BASE64)

0

Bạn có thể thực hiện nó trong C# .net dl l sử dụng SHA128Managed

1

(cho ý kiến ​​đòi hỏi 50 đại diện)

Các liên kết mà Joel cung cấp là tốt, nhưng lưu ý rằng bạn sẽ cần phải thay đổi giá trị hạt giống đạt tiêu chuẩn cho nó để sản xuất CRC32 giống như mọi người khác :

Tùy chọn Seed ByVal As Long = & HEDB88320

Hy vọng rằng sẽ giúp tiết kiệm một người khác 30 phút làm việc!

Các vấn đề liên quan