• Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

Генерация UNID

@savl
Не хочется Java дёргать или тащить монструозные либы)
 
Как обеспечить уникальность 32-х значного ключа без проверок на уникальность?
Так сделайте псевдо-форму в базе с SaveOptions=0 и по http к ней стучитесь form?create. Аяксом забирайте. И в ней всегда будет 32 уникального юнида.
 
Последнее редактирование:
encryptPassword переписана (причины там, в комментарии).
Теперь всё работает чётко и быстро. На нашем железе переданное содержимое файла 362 kb обрабатывается 0,22 секунды.

Ещё один хак для очень больших данных:

Visual Basic:
%REM
    Function getContentShort
    Description: возвращает "краткое содержимое" переданной строки, получая символы из позиций, рассчитанных по пропорции
    lenRes - количество символов содержимого, которые будут возвращены из файла (больше - точнее, но медленнее)
    Если sHash:
        - "", функция вернёт "";
        - меньше lenRes+3 символов - просто вернёт первые lenRes символов содержимого
%END REM
Public Function getContentShort(sHash As String, lenRes As Integer) As String
    If lenRes <= 0 Then Exit Function
    Dim lenHash As Long
    lenHash = Len(sHash)
    Select Case lenHash
        Case 0:
            Exit Function
        Case 1 To lenRes:
            getContentShort = sHash
        Case Is < lenRes + 3:        'для скорости; вычислять смысла нет при одинаковом-то результате
            getContentShort = Mid$(sHash, 1, lenRes)
        Case Else:
            Dim nMax As Integer, i As Integer, pos As Long
            nMax = lenRes + 1
            For i = 1 To lenRes
                pos = Fix((i / nMax) * lenHash)
                getContentShort = getContentShort + Mid$(sHash, pos, 1)
            Next
    End Select
End Function

Если передать lenRes = 32, то результат как UNID в случае, если была передана строка с Base64, использовать будет невозможно, т.к. там есть спецсимволы. Проще от результата взять тот же хеш, вызвав encryptPassword. Но всё равно для UNID использовать этот хеш стрёмно. Мы используем для защиты от повторных вызовов наших web-сервисов с аналогичными параметрами запроса.

То же содержимое файла 362 kb с lenRes = 32 обрабатывается 0,02 секунды.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!