PHP: самый безопасный (дешифруемый) метод шифрования? - PullRequest
1 голос
/ 21 сентября 2011

В PHP, какой ( расшифровываемый ) алгоритм шифрования является наиболее безопасным?
Я имею в виду, что MD5 не может быть расшифрован обратно, верно?
Я нашел полный рабочий класс с mcrypt (затем снова закодированный с base64), который может шифровать и дешифровать обратно .

Пример mcrypt (Encrypt):

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.

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

Возможно, вы хотите 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

3 голосов
/ 24 декабря 2014

Просто для пояснения: 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 используются взаимозаменяемо, это почти одно и то же: Rijndael - это имя алгоритма, а AES - это название стандарта шифрования, который принимает Rijndael в качестве метода).

1 голос
/ 21 сентября 2011

Base64 не является алгоритмом шифрования.

В PHP вы можете использовать расширение mcrypt для безопасного шифрования и дешифрования данных.

Blowfish - один из самых безопасных (и по умолчанию в mcrypt) алгоритмов, поддерживаемых PHP.

См. Полный список поддерживаемых алгоритмов здесь .


Учитывая, что вопрос изменился, это будет новый ответ:

mcrypt не алгоритм шифрования. Это библиотека, которая предоставляет интерфейс для различных алгоритмов шифрования для шифрования произвольных данных.

В контексте PHP это более или менее единственное, что вам нужно для шифрования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...