2010-08-26 4 views
0

J'ai une classe appelée Membership, dans laquelle j'ai deux méthodes. Le premier s'appelle validateUser, et le second s'appelle encryptPass. Le problème est que même si j'appelle la méthode encryptPass, elle renvoie le mot de passe d'origine. En d'autres termes; il ne semble pas qu'il retourne réellement les données ou n'appelle pas la méthode correctement? Je suis nouveau à la POO alors ne me jugez pas pour ne pas savoir beaucoup maintenant.Méthode de cryptage d'appel, ne fonctionne pas?

Voici à quoi il ressemble Étiez j'appelle la méthode:

//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."; 
    } 

Et voici comment la méthode encryptPass réelle ressemble:

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; 
} 

Je jeté ensemble un algorithme de chiffrement personnalisé que vous pouvez Vous voyez, peut-être que je me suis foutu d'une façon ou d'une autre?

Merci d'avance!

+2

'md5' n'est pas un cryptage, c'est un sens unique (quoique [non sécurisé] (http://en.wikipedia.org/wiki/Md5#Collision_vulnerabilities)/compromis) [fonction de hachage] (http: // en.wikipedia.org/wiki/Hash_function). –

+0

Il ne s'agit pas d'un "algorithme de chiffrement personnalisé" et vous produisez un hachage moins sécurisé qu'avec un seul appel de 'md5()'. – meagar

+0

Comment est-ce? Comment pourriez-vous décrypter ce hachage sans connaître l'algorithme de cryptage? Si ce n'est pas un algorithme de chiffrement, comment l'appelez-vous? – Nike

Répondre

1

Votre méthode encryptPass() ne reçoit pas d'appel à moins que votre chaîne de mot de passe $ soit supérieure à 25 caractères ou inférieure à 4. Êtes-vous sûr que c'est la bonne logique?

+0

Vous avez raison. Ce n'est pas vraiment ce que j'essayais de faire. J'ai jeté un "else" et changé la requête si à: si (strlen ($ mot de passe)> 4 && strlen ($ mot de passe) <25), cela fonctionne maintenant.Merci pour l'indice! – Nike

0

Vous vérifiez if(strlen($password) > 25 || strlen($password) < 4), qui en anglais est "si la longueur de la chaîne est supérieure à 25 ou inférieure à 4", ce qui n'est probablement pas la bonne logique. Vous avez probablement voulu dire faire

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

qui vérifierait un mot de passe qui est entre temps 5 et 24 caractères, ou

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

si vous voulez vérifier un mot de passe entre 4 et 25 caractères.

Questions connexes