Crypto.BlowfishEncryptString

string Crypto.BlowfishEncryptString ( string Text,
string Key,
number LineLen = 0 )
Примеры

Описание

Кодирует строку в Blowfish и возвращает кодированную в base64 строку, содержащую зашифрованные данные.

Примечание: Кодировка Base64 это процесс кодирования произвольных данных как простого ASCII текста. Один из обычных видов использования этого типа кодировки - пересылка файлов через электронную почту e-mail. Это один из способов применяемых стандартом MIME для пересылки данных не в текстовом ASCII формате.

Параметры

Text

(строка) Строка, которую нужно зашифровать.

Key

(строка) Секретный ключ, для шифровки данных.

LineLen

(число) Максимальная длина строки для текста, кодированного в base64, в знакоместах (символах). (Для без обрывной строки используем 0.) Значение по умолчанию равно 0.

Возврат

ResultVariable

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

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

Примеры

Пример 1

sEncryptedString = Crypto.BlowfishEncryptString(sTextToEncrypt, sSecretKey);
Кодирует текст, хранящийся в переменной 'sTextToEncrypt' с ключом, сохраненным в 'sSecretKey', и сохраняем результат в переменной 'sEncryptedString'.

Пример 2

-- Initialize Registration/Access variables
-- Инициализируем переменные регистрации/доступа
bRegistrationRequired = true;
bAllowAccess = false;

-- Initialize registry action variables
-- Инициализируем переменные действия с реестром
nMainKey = HKEY_CURRENT_USER;
sSubKey = "SOFTWARE\\Your_Product\\Registration";
sUserNameValue = "UserName";
sSerialValue = "Serial";
sMD5CheckValue = "CheckKey";
sRegisterKeyValue = "RegKey";
bAutoExpand = true;

-- if the user's registration info was stored in the Windows Registry
-- (in the form of blowfish-encrypted strings), decrypt it
-- если информация о регистрации пользователя хранится в реестре Windows
-- (в виде строк, кодированных в blowfish), декодируем её
if Registry.DoesKeyExist(nMainKey, sSubKey) then
    -- Key exists, pull values from registry
    -- Ключ существует, вытягиваем значения из реестра
    sUserName = Registry.GetValue(nMainKey, sSubKey, sUserNameValue, bAutoExpand);
    sSerial = Registry.GetValue(nMainKey, sSubKey, sSerialValue, bAutoExpand);
    sMD5Check = Registry.GetValue(nMainKey, sSubKey, sMD5CheckValue, bAutoExpand);
    sRegisterKey = Registry.GetValue(nMainKey, sSubKey, sRegisterKeyValue, bAutoExpand);

        if (sUserName ~= "") and (sSerial ~= "") and (sMD5Check) and (sRegisterKey ~= "") then
        -- All four values are present, perform check
        -- Все четыре значения присутствуют, выполняем проверку
        sUserNameDecrypted = Crypto.BlowfishDecryptString(sUserName, sRegisterKey);
        sSerialDecrypted = Crypto.BlowfishDecryptString(sSerial, sRegisterKey);

        if (Crypto.MD5DigestFromString(sUserNameDecrypted) .. Crypto.MD5DigestFromString(sSerialDecrypted)) == sMD5Check then
            -- MD5 check passed, we don't need to register
            -- Прошла проверка MD5, регистрация не нужна
            bRegistrationRequired = false;
            -- allow access
            -- разрешаем доступ
            bAccessAllowed = true;
        end
    end
end

if bRegistrationRequired then
-- Registration is required
-- Требуется регистрация
sUserName = Dialog.Input("UserName", "Please enter your username:");
    if sUserName ~= "CANCEL" and sUserName ~= "" then
    -- User didn't press cancel, get serial
    -- Пользователь не нажал cancel (отмена), получаем серийный номер
    sSerial = Dialog.Input("UserName", "Please enter your serial number:");

        if sSerial ~= "CANCEL" and sSerial ~= "" then
        -- user didn't press cancel, continue.
        -- пользователь не нажал cancel (отмена), продолжаем.

            -- get install date time in format JULIANsecondsMINUTEShours
            -- получаем установки даты и времени в формате ДАТАсекундыМИНУТЫчасы
            sInstallDateTime = System.GetDate(DATE_FMT_JULIAN) .. System.GetTime(TIME_FMT_SEC) .. System.GetTime(TIME_FMT_MIN) .. System.GetTime(TIME_FMT_HOUR);

            -- Generate HTTP Submit variables
            -- Создаем переменные HTTP Submit
            sURL = "http://www.yourdomain.com/register_app.php"
            tSubmitTable = {user = sUserName, serial = sSerial, installed = sInstallDateTime};
            nMethod = SUBMITWEB_POST;
            nTimeout = 20;
            nPort = 80;
            tAuth = nil;
            tProxy = nil;

            -- Submit to web (structure of returned string: UserNameMD5SerialMD5::Key)
            -- Отправляем в сеть (структура возвращенной строки: UserNameMD5SerialMD5::Key)
            sReturnedData = HTTP.Submit(sURL, tSubmitTable, nMethod, nTimeout, nPort, tAuthData, tProxyData);

            if sReturnedData == "-1" or sReturnedData == "" then
                -- An error occured, deny access
                -- Произошла ошибка, отказ доступа
                bAccessAllowed = false;
            else
                -- No error occured, cut apart string
                -- Ошибки не было, обрезаем часть строки
                nDelimiterPosition = String.Find(sReturnedData, "::", 1, false);
                -- Get everything before the ::
                -- Получаем все, что перед ::
                sMD5Check = String.Mid(sReturnedData, 1, nDelimiterPosition - 1);

                -- Get everything after the ::
                -- Получаем все, что после ::
                sKey = String.Mid(sReturnedData, nDelimiterPosition + 2, -1);

                -- Assign the registry values
                -- Задаем значения реестра
                Registry.SetValue(nMainKey, sSubKey, sUserNameValue, Crypto.BlowfishEncryptString(sUserName, sKey), REG_SZ);
                Registry.SetValue(nMainKey, sSubKey, sSerialValue, Crypto.BlowfishEncryptString(sSerial, sKey), REG_SZ);
                Registry.SetValue(nMainKey, sSubKey, sMD5CheckValue, sMD5Check, REG_SZ);
                Registry.SetValue(nMainKey, sSubKey, sRegisterKeyValue, sKey, REG_SZ);

                -- set register variable to false (so the user isn't prompted to enter info again)
                -- устанавливаем переменную регистрации в ложь (false) (так что пользователю не потребуется вводить информацию снова)
                bRegistrationRequired = false;
                -- display thank-you message
                -- показываем сообщение thank-you (спасибо вам)
                Dialog.Message("SUCCESS!", "Thank-you for registering. Enjoy the product!");

                -- allow access
                -- разрешаем доступ
                bAccessAllowed = true;
            end
        else
            -- Cancel was pressed, deny access
            -- Был нажат Cancel (Отмена), запрет доступа
            bAccessAllowed = false;
        end
    else
        -- Cancel was pressed, deny access
        -- Был нажат Cancel (Отмена), запрет доступа
        bAccessAllowed = false;
    end
end

if not bAccessAllowed then
    Dialog.Message("ERROR", "Invalid registration information provided.", MB_OK, MB_ICONSTOP);
    Application.Exit();
end
Считываем информацию из реестра и расшифровываем её. Если информация не существует, вышеуказанный скрипт будет взаимодействовать с находящимся в интернете php скриптом (http://www.yourdomain.com/register_app.php) для проверки серийного номера. Для этого примера, будет работать следующий php скрипт:
"Serial"
    // Инициализируем массив пользователя в формате "Username"=>"Serial"
    $user_array = array(
        "John Doe"=>"abc-def-ghi",
        "Jane Smith"=>"123-456-789"
    );

    // Get info from post variables
    // Получаем информацию от почтовых переменных
    $user = $_POST['user'];
    $serial = $_POST['serial'];
    $installed = $_POST['installed'];

    // Step through the user array
    // Шаг через массив пользователя
    foreach($user_array as $username=>$serialnumber)
    {
        // Compare current item to the posted information
        // Сравниваем текущий элемент с отправленной информацией
        if(($user==$username) AND ($serial==$serialnumber))
        {
            // The current user matched, return info and exit
            // Текущий пользователь соответствует, возвращаем данные и выходим
            echo md5($user).md5($serial).'::'.$installed;
            exit;
        }
    }

    // If this script makes it this far, nothing matched, return error code
    // Если этот скрипт делает это в конце, значит ничего не совпадает, возвращаем код ошибки
    echo -1;
}
else
{
    // no post data was sent, return error code
    // данные не были отправлены, возвращаем код ошибки
    echo -1;
}
?>
Примечание: Вышеприведенный php скрипт должен быть размещен на веб-хосте с разрешенным PHP и вызван вашей программой или при помощи действия HTTP.Submit или HTTP.SubmitSecure.
Смотрите также: Связанные действия