В моем приложении мне нужно хешировать строку, прежде чем сохранять ее в текстовый файл. Кто-нибудь знает как это сделать?
Хеш-функция Visual Basic 6.0
Ответы (5)
С какой целью вы используете хеш? Это важно, потому что некоторые хеш-алгоритмы, такие как MD5, подходят для одних целей, но не подходят для других.
Эта ссылка показывает реализацию MD5 в VB6.
Пример использования 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)
(для комментирования требуется 50 повторений)
Ссылка, которую предоставил Джоэл, хороша, но обратите внимание, что вам нужно изменить начальное значение на стандартное, чтобы оно производило тот же CRC32, что и все остальные:
Optional ByVal Seed As Long = &HEDB88320
Надеюсь, что это сэкономит кому-то еще 30 минут работы!
Вы можете попробовать с CriptoASP. Не обращайте внимания на «ASP» в названии, это ActiveX DLL, которую вы можете создать из VB6. Он предоставляет методы для генерации случайных чисел, хэшей с MD2, MD4, MD5 и SHA, а также некоторые виды шифрования / дешифрования.
Вы можете скачать его с CriptoASP.
Извините, язык Интернета на испанском, но я думаю, что вы можете понять очень простое использование COM с примерами внизу Док. для CriptoASP просто замените Server.CreateObject предложением нового объекта в VB6.
Скажите, хотите ли вы перевод примеров или документации.
Чтобы сохранить его в текстовый файл, вы можете использовать FSO (объект файловой системы).
У меня были очень хорошие результаты с этим, но реализация 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