ФорумПрограммированиеПыхнуть хотите?Готовые решения → Небольшой класс-обёртка для шифрования и кодирования

Небольшой класс-обёртка для шифрования и кодирования

  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 15:05

    Бесполезная для большинства вещь. Но, мои 5 копеек:
    <?php

    // Конфиг
    class MAIN
    {
    protected static $crypt_config = array('algorithm' => MCRYPT_BLOWFISH, 'mode' => MCRYPT_MODE_ECB, 'key' => 'crypt_key', 'md5' => 'md5_salt', 'sha1' => 'sha1_salt');
    }

    // Шифровалка/кодировалка
    class CRYPT extends MAIN
    {
    private static $resource;

    public static function encrypt($str)
    {
    self::$resource = mcrypt_module_open(parent::$crypt_config['algorithm'], null, parent::$crypt_config['mode'], null);
    mcrypt_generic_init(self::$resource, parent::$crypt_config['key'], mcrypt_create_iv(mcrypt_enc_get_iv_size(self::$resource), MCRYPT_RAND));
    $encrypt_string = mcrypt_generic(self::$resource, $str);
    mcrypt_generic_deinit(self::$resource);
    mcrypt_module_close(self::$resource);
    return $encrypt_string;
    }

    public static function decrypt($str)
    {
    self::$resource = mcrypt_module_open(parent::$crypt_config['algorithm'], null, parent::$crypt_config['mode'], null);
    mcrypt_generic_init(self::$resource, parent::$crypt_config['key'], mcrypt_create_iv(mcrypt_enc_get_iv_size(self::$resource), MCRYPT_RAND));
    $decrypt_string = mdecrypt_generic(self::$resource, $str);
    mcrypt_generic_deinit(self::$resource);
    mcrypt_module_close(self::$resource);
    return rtrim($decrypt_string);
    }

    public static function hash_md5($str, $raw_output = false)
    {
    return md5($str.parent::$crypt_config['md5'], $raw_output);
    }

    public static function hash_sha1($str, $raw_output = false)
    {
    return sha1($str.parent::$crypt_config['sha1'], $raw_output);
    }

    public static function b64_encode($str)
    {
    return strtr(base64_encode($str), '+/=', '-_~');
    }

    public static function b64_decode($str)
    {
    return base64_decode(strtr($str, '-_~', '+/='));
    }
    }

    // Примеры использования
    echo "Encrypted 'hello': ".($hello = CRYPT::encrypt('hello'))."<br>";
    echo "Decrypted 'hello': ".CRYPT::decrypt($hello)."<br>";
    echo "md5 'hello': ".CRYPT::hash_md5('hello')."<br>";
    echo "sha1 'hello': ".CRYPT::hash_sha1('hello')."<br>";
    echo "Encoded b64 'hello': ".($hello = CRYPT::b64_encode('hello'))."<br>"; // Можно крутить для передачи в урле
    echo "Decoded b64 'hello': ".CRYPT::b64_decode($hello);

    ?>

  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 13 сентября 2010 г. 15:35, спустя 30 минут 23 секунды

    Hight, крутяк! =)

    только нахуй тут extend я не пойму.
    а так же почему не вынести инициализацию ресурса (из методов CRYPT::encrypt() и CRYPT::decrypt()) в отдельный метод типа
    public static function getResource()
    {
    if (self::$resource === null) {
    self::$resource = mcrypt_module_open(parent::$crypt_config['algorithm'], null, parent::$crypt_config['mode'], null);
    }
    return self::$resource;
    }


    а вообще молодец что постишь свои пять копеек в готовые решения.
    чмоки бейби.
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 15:44, спустя 8 минут 28 секунд

    только нахуй тут extend я не пойму.

    А он там нахуй и не нужен. Мне влом было перепиливать. =)
    а так же почему не вынести инициализацию ресурса

    Можно и вынести. Но так кода больше. Не аргумент, понимаю…

    =)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 13 сентября 2010 г. 15:46, спустя 2 минуты 34 секунды

    Напомнил, скоро напишу статью как данные шифрованные гонять из python в php сайты, для обмена шифрованными данными.
    Используется сериализация + RSA
    adw/0
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 13 сентября 2010 г. 15:48, спустя 1 минуту 57 секунд


    только нахуй тут extend я не пойму.

    А он там нахуй и не нужен. Мне влом было перепиливать. =)

    эх дружочек))))
    переместить этот массив в класс CRYPT и переименовать вызовы parent на self влом ?))))


    а так же почему не вынести инициализацию ресурса

    Можно и вынести. Но так кода больше. Не аргумент, понимаю…
    а тут дело не в количестве кода, а втом что если я например буду пару сотен раз вызывать енкрипт а потом декрипт, то у меня все эти разы будет происходить ненужная операция mcrypt_module_open(), которая может быть выполнена только раз.
    вот вам и оптимизация =)
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 15:54, спустя 5 минут 50 секунд

    переместить этот массив в класс CRYPT и переименовать вызовы parent на self влом ?))))

    Ты себе даже не представляешь насколько!
    может быть выполнена только раз.
    вот вам и оптимизация =)

    Ты отыграешь пару сантисекунд. А нахуй оно надо.
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 16:02, спустя 8 минут 17 секунд

    Ты отыграешь пару сантисекунд.

    Мне даже стало интересно, а насколько будет разной производительность. Кто потестит?
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 13 сентября 2010 г. 16:05, спустя 2 минуты 20 секунд


    может быть выполнена только раз.
    вот вам и оптимизация =)

    Ты отыграешь пару сантисекунд. А нахуй оно надо.
    для меня это просто дело принципа, но в любом случае это "+".
    просто в следующий раз это может быть метод который кпримеру делает очень сложную выборку, и если ты его будешь так дрочить, то сервер тебе покажет писю.

    все, пойду в другие темы, ато я распизделся чето))))
    Спустя 60 сек.

    Ты отыграешь пару сантисекунд.

    Мне даже стало интересно, а насколько будет разной производительность. Кто потестит?
    кто предложил - тот и делает =)
    как раз будет замечательное дополнение к товей мини-статье
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 13 сентября 2010 г. 17:12, спустя 1 час 7 минут 4 секунды

    кто предложил - тот и делает =)

    Ладно. Будет настроение - сделаю ;)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 14 сентября 2010 г. 1:19, спустя 8 часов 7 минут 38 секунд

    сумбурный код какой то, оформи в норм класс с полями, вместо ппротектед массива, и в функции, вместо статич вызовов + иннициализатор, а то у тя щас сменить ключ шифрования можно только сменив исходник :D

    в общем вещь (кому то) полезная, но сырая имхо.

    да, тоже подобным баловался года 2 назад или год ли, не помню %)
    Сапожник без сапог
  • Sinkler

    Сообщения: 8059 Репутация: N Группа: в ухо

    Spritz 14 сентября 2010 г. 10:30, спустя 9 часов 10 минут 11 секунд

    сериализация + RSA

    реализовал такой шифратор/дешифратор на сишарпе
    Спустя 50 сек.
    там кстати крутяшные библиотеки есть для шифрования, давно смотрел, понравилось
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 сентября 2010 г. 12:47, спустя 2 часа 17 минут 8 секунд

    Sinkler, а с чем обменивался? Сам с собой?
    adw/0
  • Sinkler

    Сообщения: 8059 Репутация: N Группа: в ухо

    Spritz 14 сентября 2010 г. 12:52, спустя 5 минут 33 секунды


    Sinkler, а с чем обменивался? Сам с собой?
    да, просто прога, шифрует/дешифрует, экспортирует/импортирует ключи. где-то валялась даже. это вроде как курсовая девушки была
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 14 сентября 2010 г. 13:07, спустя 14 минут 34 секунды

    ясно )
    adw/0
  • Hight

    Сообщения: 1489 Репутация: N Группа: Адекваты

    Spritz 14 сентября 2010 г. 14:10, спустя 1 час 3 минуты

    сумбурный код какой то, оформи в норм класс с полями, вместо ппротектед массива, и в функции, вместо статич вызовов + иннициализатор, а то у тя щас сменить ключ шифрования можно только сменив исходник :D

    в общем вещь (кому то) полезная, но сырая имхо.

    Ай как ты попался. Ай жжошь. Я ведь могу натроллить на это тонну говнища. Поехали…

    Код не сумбурный, а крутой. Думаешь твой вкус крут и тру везде в этой вселенной. Куй. Как думаешь, зачем конфиг был вынесен в другой класс?! Отвечу - именно там должен быть метод который этот конфиг генерит, может там был когда-то конструктор, а! Это круто! Почему всё статик?! А нафига мне делать не статик?! Нафига мне инициализировать объект для использования методов этого класса?! Я понимаю, что некоторую логику класса (подгрузку конфига, инициализацию модуля и какую-нибудь другую хуйню) можно было вынести в конструктор. Но мне так не нравится. Я так не люблю, у меня на это не стоит. Если можно сделать статиком, надо делать статиком. Нахуя выёбываться ради двух пуков?!

    =) дет. сад

Пожалуйста, авторизуйтесь, чтобы написать комментарий!