В PHP, какой ( дешифруемый ) алгоритм шифрования наиболее безопасен?
Я имею в виду, что MD5 не может быть расшифрован обратно вправо?
Я нашел полный рабочий класс с mcrypt (затем закодированным с base64 снова), который может зашифровать и дешифровать обратно .
Пример mcrypt (Шифрование):
function encrypt($value) { if(!$value){return false;} $text = $value; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $text, MCRYPT_MODE_ECB, $iv); return trim($this->safe_b64encode($crypttext)); }
Затем снова закодируйте base64:
function safe_b64encode($string) { $data = base64_encode($string); $data = str_replace(array('+','/','='),array('-','_',''),$data); return $data; }
(Извините за код, просто зашифрованный, без расшифровки. Я просто даю образец.) Но я просто хочу знать, есть ли другой более безопасный алгоритм, а затем с помощью mcrypt.
Вероятно, вы хотите MCRYPT_RIJNDAEL_256. Rijndael с блоками размером 128, 192 и 256 бит является обобщением AES, который поддерживает только размер блока 128 бит.
См. http://us.php.net/manual/en/mcrypt.ciphers.php и http://us.php.net/manual/en/book.mcrypt.php.
Просто уточнить: алгоритмы MD
и SHA
являются алгоритмами HASH
: они вычисляют контрольную сумму данных, поэтому вы можете позже проверить, что она не была изменена. Подумайте об этом так:
Ваши данные: 592652
. Вы хотите, чтобы контрольная сумма знала, что это не было изменено, вы делаете что-то вроде:
5+9+2+6+5+2=29 2+9=11 1+1=2
Теперь, когда вы хотите проверить свои данные, вы можете выполнить его с помощью одного и того же вычисления и посмотреть, получится ли у вас тот же результат:
2
Однако нет способа взять это 2 и вернуть исходные данные: 592652.
Конечно, реальные алгоритмы хэшей вычислений различны, этот пример – всего лишь демонстрация общей идеи. Это не шифрование.
Что касается шифрования, то в наши дни алгоритм AES, вероятно, наиболее безопасен, я бы отправился на AES-512. Как отмечали другие, RIJNDAEL следует отдать предпочтение. (AES и Rijndael используются обмениваемо, theyre почти то же самое: Rijndael – это имя алгоритма, в то время как AES – это название стандарта шифрования, который использует Rijndael в качестве своего метода).
Base64 не является алгоритмом шифрования.
На PHP вы можете использовать расширение mcrypt для безопасного шифрования и дешифрования данных.
Blowfish
– один из наиболее безопасных (и по умолчанию в mcrypt) алгоритмах, поддерживаемых PHP.
См. Полный список поддерживаемых алгоритмов.
Учитывая, что вопрос изменился, это будет новый ответ:
mcrypt не является алгоритмом шифрования. Это библиотека, которая обеспечивает интерфейс для различных алгоритмов шифрования для шифрования произвольных данных.
В контексте PHP это более или менее единственная достойная вещь, которую вы должны шифровать данные.