Хеш-функция Visual Basic 6.0

В моем приложении мне нужно хешировать строку, прежде чем сохранять ее в текстовый файл. Кто-нибудь знает как это сделать?


person Community    schedule 28.11.2008    source источник
comment
Вы должны указать, какова цель хеширования, например, сокрытие пароля, разрешение поиска и т. Д.   -  person PhiLho    schedule 28.11.2008


Ответы (5)


С какой целью вы используете хеш? Это важно, потому что некоторые хеш-алгоритмы, такие как MD5, подходят для одних целей, но не подходят для других.

Эта ссылка показывает реализацию MD5 в VB6.

person HTTP 410    schedule 28.11.2008
comment
Ссылка больше не действительна. Сломанный. @Дорожный Воин - person Ahmad; 19.02.2014
comment
@Ahmad, я исправил ссылку. - person HTTP 410; 22.02.2014

Пример использования 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)
person Gary Kindel    schedule 12.12.2008

(для комментирования требуется 50 повторений)

Ссылка, которую предоставил Джоэл, хороша, но обратите внимание, что вам нужно изменить начальное значение на стандартное, чтобы оно производило тот же CRC32, что и все остальные:

Optional ByVal Seed As Long = &HEDB88320

Надеюсь, что это сэкономит кому-то еще 30 минут работы!

person Community    schedule 18.02.2009

Вы можете попробовать с CriptoASP. Не обращайте внимания на «ASP» в названии, это ActiveX DLL, которую вы можете создать из VB6. Он предоставляет методы для генерации случайных чисел, хэшей с MD2, MD4, MD5 и SHA, а также некоторые виды шифрования / дешифрования.

Вы можете скачать его с CriptoASP.

Извините, язык Интернета на испанском, но я думаю, что вы можете понять очень простое использование COM с примерами внизу Док. для CriptoASP просто замените Server.CreateObject предложением нового объекта в VB6.

Скажите, хотите ли вы перевод примеров или документации.

Чтобы сохранить его в текстовый файл, вы можете использовать FSO (объект файловой системы).

person ARemesal    schedule 28.11.2008

У меня были очень хорошие результаты с этим, но реализация c

SDBM

этот алгоритм был создан для библиотеки баз данных sdbm (общедоступная реализация ndbm). Было обнаружено, что он хорошо справляется с битами скремблирования, вызывая лучшее распределение ключей и меньшее количество разделений. это также хорошая общая хеш-функция с хорошим распределением. фактическая функция - hash (i) = hash (i - 1) * 65599 + str [i]; ниже представлена более быстрая версия, используемая в gawk. [есть даже более быстрая версия для безупречных устройств] магическая константа 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
person EvilTeach    schedule 28.11.2008
comment
Вся суть shl (‹<) состоит в том, чтобы избежать использования умножения на 65599, что является относительно медленным. Порт VB имеет ДВА умножения. Было бы быстрее сделать это: newHash = символ (c) + (previousHashValue * 65599) - person Steve; 03.12.2010