База знаний / Справочник TiOS / Разработка (TiOS) / Справочник по программированию / Системные функции (syscall)
Функция sha1
| Назначение: | Вычисляет SHA1-хеш для строки str. |
| Синтаксис: | sha1(byref str as string,byref input_hash as string,sha1_mode as sha1_modes,total_len as word) as string |
| Возвращает: | Строку-хеш из 20 символов; пустую строку, если обнаружен недопустимый аргумент str или input_hash |
| См. также: | md5 |
| Элемент | Описание |
| str | Строка с (очередной порцией) входных данных, для которых вычисляется SHA1-хеш. При sha1_mode = 0 - SHA1_UPDATE длина строки должна быть 64, 128 или 192 символа. Любая другая длина приведёт к ошибке, и функция вернёт пустую строку. При sha1_mode = 1 - SHA1_FINISH строка может иметь любую длину (до 255 байт). |
| input_hash | Хеш, полученный в результате вычисления SHA1 для предыдущей порции данных. Для первой порции данных оставьте его пустым. Для второй и всех последующих порций передавайте результат вычисления SHA1 для предыдущей порции. Результат sha1 всегда имеет длину 20 символов, поэтому строка любой другой длины (кроме 0 - см. выше) приведёт к ошибке, и функция вернёт пустую строку. |
| sha1_mode | 0 - SHA1_UPDATE: устанавливается для всех порций данных, кроме последней. 1 - SHA1_FINISH: устанавливается для последней порции данных; этот режим выбирается и тогда, когда порция всего одна. |
| total_len | Общая длина обработанных данных (по всем порциям вместе). Имеет значение только при sha1_mode = 1 - SHA1_FINISH, то есть только для последней или единственной порции данных. |
Подробности
SHA1 - стандартный метод вычисления хеш-кодов для данных любого размера. Объём входных данных часто превышает максимальную ёмкость строковых переменных (255 символов). Метод sha1 можно вызывать повторно, чтобы обработать данные любого размера (см. пример ниже).
Примеры
Dim s, hash As String
'simple calculation on a short string
s="Sting to calculate SHA1 on"
hash=sha1(s,"",SHA1_FINISH,Len(s))
'calculation on the entire contents of data in the 'text.txt 'file
romfile.open("text.txt")
hash=""
s=romfile.getdata(192) 'use max portions
While Len(s)=192
hash=sha1(s,hash,SHA1_UPDATE,0)
s=romfile.getdata(192)
Wend
hash=sha1(s,hash,SHA1_FINISH,romfile.size) 'last portion for whatever unprocessed data is remaining in the file