Crypto.MD5DigestFromString

string Crypto.MD5DigestFromString ( string Text )
Примеры

Описание

Создает контрольную сумму MD5 для данной текстовой строки. Контрольная сумма MD5 это 128-битный "отпечаток пальца" или цифровая сигнатура строки, представленная строкой в 32 шестнадцатиричных цифры. Каждая уникальная строка текста гарантированно будет представлена уникальной контрольной суммой. Более того практически невозможно определить исходную строку из контрольной суммы. Другими словами, вычисление MD5 работает только в одном направлении. Это делает его крайне полезным для хранения паролей. Взамен хранения пароля в обычном тексте, следует хранить его как контрольную сумму MD5. Когда пользователь вводит пароль, вычисляется контрольная сумма введенного текста и сравнивается с хранящейся контрольной суммой MD5. Если они одинаковы, значит пользователь ввел верный пароль. Так как нет способа обратно получить из контрольной суммы пароль, не имеет значения если кто-то увидит контрольную сумму.

Примечание: MD5 это не замена надежным паролям. Использование небезопасного пароля типа "sneeze" или "equine" может сделать программу открытой для так называемых "атак по словарю", когда хакер просто пытается подобрать контрольную сумму MD5 для каждого слова в словаре. Убедитесь, что используете надежные пароли, такие как "sationicat59" или "b$fer>fe!23".

Совет: Хороший способ разрушения атак по словарю при использовании паролей пользователя добавлять ко всем паролям не алфавитную строку. Например, простое добавление "$!%" в конец любого пароля перед генерацией его контрольной суммы MD5. При этом способе, даже реально плохой пароль, типа "password", будет относительно безопасным для атак по словарю.

Параметры

Text

(строка) Текст, для которого вычисляется контрольная сумма.

Возврат

ResultVariable

(строка) Контрольная сумма, что была вычислена для даного текста. Если контрольная сумма не может быть вычислена или происходит какая другая ошибка, будет возвращена пустая строка (""). Можно использовать Application.GetLastError для определения случился ли отказ в работе этого действия и почему.

При добавлении действия из редактора скрипта, можно использовать это поле для определения переменной, которая возвращает значение, сохраняющееся в ней.
Смотрите также: Связанные действия

Примеры

Пример 1

-- Calculate the MD5 message digest for the user's name and display it in a message
-- Вычисляем контрольную сумму MD5 для имени пользователя и показываем его в сообщении
strName = Dialog.Input("", "What is your name?", "", MB_ICONQUESTION);
strDigitalSignature = Crypto.MD5DigestFromString(strName);
Dialog.Message("The digital signature for your name is:", strDigitalSignature);
Запрашиваем имя пользователя, затем генерируем контрольную сумму MD5 для него и показываем её в диалоговом окне сообщения.

Пример 2

--[[ note: our app allows the user to password-protect it. If the user
          chose to enable password-protection, they were prompted for
          a password, we appended a suffix to it (to help prevent
          dictionary attacks), and the MD5 digest for the resulting
          password + suffix was stored in the Registry.]]
--[[ примечание: наше приложение позволяет пользователю защитить её паролем.
          Если пользователь выбирает включение защиты паролем, он назовет
          пароль, мы добавим к нему суффикс (для предотвращения
          атак по словарю), и MD5 сумма для полученного
          пароля + суффикс будут сохранены в реестре.]]

--[[ get the digest that was stored in the Registry at HKEY_CURRENT_USER\Software\SuperDooperApp
    note: this was calculated when the user supplied the password,
          before it was stored ]]
--[[ получаем MD5 сумму, что будет сохранена в реестре в HKEY_CURRENT_USER\Software\SuperDooperApp
    примечание: она будет вычислена, когда пользователь задаст пароль,
          перед его сохранением ]]
reg_md5 = Registry.GetValue(HKEY_CURRENT_USER, "Software\\SuperDooperApp", "password")

-- the value only exists when the app is password-protected
-- значение существует только у приложения защищенного паролем
if reg_md5 ~= "" then
    --[[ ask the user for the password they supplied when they enabled
         the password protection feature ]]
    --[[ запрашиваем у пользователя пароль заданный при включении
         параметра защита паролем ]]
    pw = Dialog.Input("", "Please enter your password:");

    --[[ we added "!$" to their password before it was stored,
        to help make the user's password safe from dictionary attacks ]]
    --[[ добавляем "!$" к паролю перед его сохранением,
        чтобы сделать пароль пользователя безопасным при атаках по словарю ]]
    pw = pw .. "!$";

    -- calculate the MD5 message digest for the password + suffix
    -- вычисляем контрольную сумму MD5 для пароля + суффикса
    pw_md5 = Crypto.MD5DigestFromString(pw);

    -- exit the app if the password digests don't match
    -- выход из программы, если контрольная сумма пароля не соответствует
    if pw_md5 ~= reg_md5 then
        Dialog.Message("", "Sorry, invalid password!");
        Application.Exit();
    end
end
Получаем контрольную сумму MD5 пароля запрошенного у пользователя, что была предварительно сохранена в реестре, и сравниваем ее с текущим паролем, введенным пользователем. Если контрольные суммы не совпадают, приложение закрывается.
Смотрите также: Связанные действия