<?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);
?>
Форум → Программирование → Пыхнуть хотите? → Готовые решения → Небольшой класс-обёртка для шифрования и кодирования
Небольшой класс-обёртка для шифрования и кодирования
-
Бесполезная для большинства вещь. Но, мои 5 копеек:
-
13 сентября 2010 г. 12: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;
}
а вообще молодец что постишь свои пять копеек в готовые решения.
чмоки бейби. -
13 сентября 2010 г. 12:44, спустя 8 минут 28 секунд
только нахуй тут extend я не пойму.
А он там нахуй и не нужен. Мне влом было перепиливать. =)а так же почему не вынести инициализацию ресурса
Можно и вынести. Но так кода больше. Не аргумент, понимаю…
=) -
13 сентября 2010 г. 12:46, спустя 2 минуты 34 секунды
Напомнил, скоро напишу статью как данные шифрованные гонять из python в php сайты, для обмена шифрованными данными.
Используется сериализация + RSAhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
13 сентября 2010 г. 12:48, спустя 1 минуту 57 секунд
только нахуй тут extend я не пойму.
А он там нахуй и не нужен. Мне влом было перепиливать. =)
эх дружочек))))
переместить этот массив в класс CRYPT и переименовать вызовы parent на self влом ?))))
а тут дело не в количестве кода, а втом что если я например буду пару сотен раз вызывать енкрипт а потом декрипт, то у меня все эти разы будет происходить ненужная операция mcrypt_module_open(), которая может быть выполнена только раз.а так же почему не вынести инициализацию ресурса
Можно и вынести. Но так кода больше. Не аргумент, понимаю…
вот вам и оптимизация =) -
13 сентября 2010 г. 12:54, спустя 5 минут 50 секунд
переместить этот массив в класс CRYPT и переименовать вызовы parent на self влом ?))))
Ты себе даже не представляешь насколько!может быть выполнена только раз.
вот вам и оптимизация =)
Ты отыграешь пару сантисекунд. А нахуй оно надо. -
13 сентября 2010 г. 13:02, спустя 8 минут 17 секунд
Ты отыграешь пару сантисекунд.
Мне даже стало интересно, а насколько будет разной производительность. Кто потестит? -
13 сентября 2010 г. 13:05, спустя 2 минуты 20 секунд
для меня это просто дело принципа, но в любом случае это "+".может быть выполнена только раз.
вот вам и оптимизация =)
Ты отыграешь пару сантисекунд. А нахуй оно надо.
просто в следующий раз это может быть метод который кпримеру делает очень сложную выборку, и если ты его будешь так дрочить, то сервер тебе покажет писю.
все, пойду в другие темы, ато я распизделся чето))))Спустя 60 сек.
кто предложил - тот и делает =)Ты отыграешь пару сантисекунд.
Мне даже стало интересно, а насколько будет разной производительность. Кто потестит?
как раз будет замечательное дополнение к товей мини-статье -
13 сентября 2010 г. 14:12, спустя 1 час 7 минут 4 секунды
кто предложил - тот и делает =)
Ладно. Будет настроение - сделаю ;) -
13 сентября 2010 г. 22:19, спустя 8 часов 7 минут 38 секунд
сумбурный код какой то, оформи в норм класс с полями, вместо ппротектед массива, и в функции, вместо статич вызовов + иннициализатор, а то у тя щас сменить ключ шифрования можно только сменив исходник :D
в общем вещь (кому то) полезная, но сырая имхо.
да, тоже подобным баловался года 2 назад или год ли, не помню %)Сапожник без сапог -
14 сентября 2010 г. 7:30, спустя 9 часов 10 минут 11 секунд
сериализация + RSA
реализовал такой шифратор/дешифратор на сишарпеСпустя 50 сек.там кстати крутяшные библиотеки есть для шифрования, давно смотрел, понравилось -
14 сентября 2010 г. 9:47, спустя 2 часа 17 минут 8 секунд
Sinkler, а с чем обменивался? Сам с собой?https://smappi.org/ - платформа по созданию API на все случаи жизни -
14 сентября 2010 г. 9:52, спустя 5 минут 33 секунды
да, просто прога, шифрует/дешифрует, экспортирует/импортирует ключи. где-то валялась даже. это вроде как курсовая девушки была
Sinkler, а с чем обменивался? Сам с собой? -
14 сентября 2010 г. 10:07, спустя 14 минут 34 секунды
ясно )https://smappi.org/ - платформа по созданию API на все случаи жизни -
14 сентября 2010 г. 11:10, спустя 1 час 3 минуты
сумбурный код какой то, оформи в норм класс с полями, вместо ппротектед массива, и в функции, вместо статич вызовов + иннициализатор, а то у тя щас сменить ключ шифрования можно только сменив исходник :D
в общем вещь (кому то) полезная, но сырая имхо.
Ай как ты попался. Ай жжошь. Я ведь могу натроллить на это тонну говнища. Поехали…
Код не сумбурный, а крутой. Думаешь твой вкус крут и тру везде в этой вселенной. Куй. Как думаешь, зачем конфиг был вынесен в другой класс?! Отвечу - именно там должен быть метод который этот конфиг генерит, может там был когда-то конструктор, а! Это круто! Почему всё статик?! А нафига мне делать не статик?! Нафига мне инициализировать объект для использования методов этого класса?! Я понимаю, что некоторую логику класса (подгрузку конфига, инициализацию модуля и какую-нибудь другую хуйню) можно было вынести в конструктор. Но мне так не нравится. Я так не люблю, у меня на это не стоит. Если можно сделать статиком, надо делать статиком. Нахуя выёбываться ради двух пуков?!
=) дет. сад
Пожалуйста, авторизуйтесь, чтобы написать комментарий!