2010-08-26 2 views
0

У меня есть класс под названием Membership, в котором у меня есть два метода. Первый называется validateUser, а второй называется encryptPass. Проблема в том, что, хотя я называю метод encryptPass, он возвращает исходный пароль. Другими словами; похоже, что это фактически не возвращает данные или неправильно вызывает этот метод?Метод шифрования вызовов, не работает?

Я новичок в ООП, поэтому не судите меня за то, что я не очень много знаю.

Вот как это выглядит, были, я называю метод:

//validate password and hash it if valid 
    if(strlen($password) > 25 || strlen($password) < 4) { 
    $password = $this->encryptPass($password); 
    $errorArray[] = "Löenordet måste vara mellan 4-25 tecken långt."; 
    } 

И это как фактический метод encryptPass выглядит следующим образом:

function encryptPass($password) { 
    $salt = substr($password, 2, 4); 
    $password = md5(md5($password)); 
    $password = substr($password, 0, 20) . $salt . substr($password, 0, 20); 
    $password = md5($password); 
    return $password; 
} 

Я бросил вместе собственный алгоритм шифрования, как вы можете Видишь, может быть, я как-то испортил?

Заранее благодарен!

+2

'md5' не является шифром, он является односторонним (хотя [небезопасным] (http://en.wikipedia.org/wiki/Md5#Collision_vulnerabilities)/скомпрометированным) [хеширующая функция] (http: // en.wikipedia.org/wiki/Hash_function). –

+0

Это не «пользовательский алгоритм шифрования», и вы создаете менее безопасный хэш, чем если бы вы имели один вызов 'md5()'. – meagar

+0

Как это? Как вы могли бы расшифровать этот хеш, не зная «алгоритм шифрования»? Если это не алгоритм шифрования, как вы это называете? – Nike

ответ

1

Ваш метод encryptPass() не вызывается, если ваша строка $ password не превышает 25 символов или меньше 4. Вы уверены, что это правильная логика?

+0

Ты прав. На самом деле это не то, что я пытался сделать. Я добавил «else» и изменил запрос if: if (strlen ($ password)> 4 && strlen ($ password) <25), теперь он работает.Спасибо за подсказку! – Nike

0

Вы проверяете if(strlen($password) > 25 || strlen($password) < 4), что на английском языке является «если длина строки больше 25 или менее 4», что, вероятно, не является правильной логикой. Вы, вероятно, имел в виду, чтобы сделать

if (strlen($password) > 4 && strlen($password) < 25) 

которые проверяют бы для пароля длиной от 5 до 24 символов, или

if (strlen($password) >= 4 && strlen($password) <= 25) 

, если вы хотите, чтобы проверить наличие пароля от 4 до 25 символов.

Смежные вопросы