Page 1 sur 1

Généraliser une "fonction"

Posté : 29 juil. 2012, 06:10
par Fre3z69
Bonjours à tous

j'ai trouver sur le net une fonction permettant d'encrypter et décrypter un mot de passe.

le hic c'est que j'aimerais l'utiliser sur plusieurs pages:
une page permettant d'enregistrer un mot de passe crypter entré dans un formulaire,
une page permettant d'afficher les mots de passes décryptés.

Voici la "fonction" actuelle
		$key = 'uneclefdecryptage';
		$pass = 'lemotdepasse';
//permet de décrypter les mots de passes récupérés de la base de donnée ($pass)
		$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($pass), MCRYPT_MODE_CBC, md5(md5($key))), '\0');
//permet d'encrypter le mot de passe avant de l'envoyer dans la base de donnée
		$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $decrypted, MCRYPT_MODE_CBC, md5(md5($key))));
Le hic c'est qu'il faut que je mette cette fonction sur chaque page où l'on, affiche, entre/modifie, un mot de passe, il faudrait donc que je puisse la généraliser

J'ai essayer de créer une fonction, mais en vain.

En espérant que ma demande soit compréhensible.

Merci de votre aide

Cordialement

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 09:52
par Zahnzao
Salut,

Je ne connais pas ces fonctions mais...

ton $decrypted permet de décrypter une clé, et tu utilises $pass qui est un mot de passe. Tu ne le connaitras pas si tu entre une clé dans un formulaire.

Et ton $encrypted permet de crypter un mot de passe, et tu utilises $key qui est une clé...

Y'a pas un probleme quelque part ??

Sinon pour ta demande, un exemple de fontion
function decrypt($key){
     $decrypted= // ta fonction de decryptage
     return $decrypted;
}
Que tu apelles de cette facon
$decrypted=decrypt('unecledecryptage');
Cordialement.

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 15:51
par Fre3z69
Bin non

Je décrypte les clef en base de donnée, donc c'est normal que ça soit $pass (qui est la(les) valeur(s) sortie(s))

De même pour encrypter, on utilise la clef (de même que pour décrypter) qui permet d'encoder de façon unique le mdp.

pour la fonction j'avais fait un truc pareil que tu as fait, mais en fait il faudrais lui passer le mot de passe (qu'il vienne du formulaire ou de la base de donnée)

Merci de votre aide

Cordialement

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 18:19
par xTG
Le principe reste le même pour le mot de passe :
function decrypt($key, $pass){
  // ...
}
decrypt($taKey, $TonMdp);

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 18:21
par Fre3z69
merci ^^

Par contre, comment je lui fournit le mdp de la base ou du formulaire ^^

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 20:43
par xTG
decrypt($taKey, $_POST['pass']);
Même principe pour tout autre information que tu souhaiterai, tout n'est que variable.

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 21:04
par Fre3z69
ok merci je vais essayer ceci.

Cordialement

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 21:41
par Fre3z69
ça fonctionne.

Voici le résultat:
	$key = 'unclefdencodage';
function decrypt($pass){
	global $key;
    $pass = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($pass), MCRYPT_MODE_CBC, md5(md5($key))));
	return $pass;
}
function encrypt($pass){
	global $key;
    $pass = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $pass, MCRYPT_MODE_CBC, md5(md5($key))));
	return $pass;
}

$pass = decrypt($dp['password']);
$pass = encrypt($_POST['password']);

Merci de votre aide

Cordialement

Re: Généraliser une "fonction"

Posté : 29 juil. 2012, 22:41
par Zahnzao
Bin non

Je décrypte les clef en base de donnée, donc c'est normal que ça soit $pass (qui est la(les) valeur(s) sortie(s))

De même pour encrypter, on utilise la clef (de même que pour décrypter) qui permet d'encoder de façon unique le mdp.

pour la fonction j'avais fait un truc pareil que tu as fait, mais en fait il faudrais lui passer le mot de passe (qu'il vienne du formulaire ou de la base de donnée)

Merci de votre aide

Cordialement
Ok ok, je pensais que $pass était le pass en clair.

Au temps pour moi ;)

A+

Re: [RESOLU] Généraliser une "fonction"

Posté : 30 juil. 2012, 05:35
par Fre3z69
pas grave, merci quand même.

Codialement

Re: [RESOLU] Généraliser une "fonction"

Posté : 30 juil. 2012, 08:58
par Berzemus
Puisque la crypto est un de mes champs de prédilection en ce moment, je me dois d'intervenir, puisqu'il y a incompréhension totale sur le sujet dans ce que je viens de lire (a noter que je parle ici du code, ce que je dis n'est pas à prendre personnellement).


1) Chiffrer un mot de passe ? Heindre ? :shock: ça ne s'enregistre pas un mot de passe, pour aucune raison valable. S'il y en a une, elle est sans doute mauvaise. On enregistre un hash d'un mot de passe, salé qui plus est (c'est à dire, concaténé avec une chaîne aléatoire unique qu'on enregistrera, en clair, avec le mot de passe).
Lire la doc de cette fonction pour bien chiffrer un mot de passe, et s'assurer qu'on dispose de blowfish ou sha-256 ou sha-512: crypt()

2) md5 ? :shock: Autant enregistrer tout en clair... md5 est considéré brisé. Peut-importe si on le rehache 15 fois. Rien que le fait de l'utiliser prouve que l'auteur des fonctions n'y comprenait pas grand chose: on n'y voit qu'une illusion de sécurité en utilisant AES 256 (très utile si tu protège des données très très confidentielles, la NSA et le NIST le recommandent, du reste c'est overkill) puisque affaiblie par l'utilisation qui en est faite ici (md5, pas d'IV ...). L'encodage en base 64 est très drôle. C'est peut-être une blague en fait :D .
On utilisera au moins sha-1, bien que considéré affaibli dans le monde de la crypto, et on sera plus avisé de se porter sur sha-2 (sha-256, 384, 512), qui tient la route pour le moment, en attendant que la compétition sha-3 déclare son vainqueur (je penche pour keccak, mais c'est le seul dont j'ai lu la doc :wink: ). Et toujours avec un nonce (sel) bien entendu.

3) l'utilisation d'un algorithme de chiffrage demande, pour obtenir la sécurité qu'il prétend donner, qu'on respecte ses requis et son mode de fonctionnement. La non-utilisation correcte d'un vecteur d'initialisation en est un cas flagrant ici. C'est censé être un sel ( avec une fonction toute faite: mcrypt-create-iv() ), qu'on enregistre en clair avec le chiffre, pas un re-cryptage de la clé.

4) Pour ce qui est du code, je vois mal d'ou vient la variable "$key", la clé qui chiffre les mots de passe. Mais puisque c'est une variable "globale", le pire est a craindre... (il suffirait de s'infiltrer sur le serveur, de lire le bout de code idoine, et hop, on a accès à toutes les données !)

Bref (j'abrège, on m'attend pour le petit-déjeuner), la sécurité, si on souhaite l'offrir, ne se réalise pas en implémentant des choses à gauche à droite. Soit on tente de comprendre ce qui se passe (avec l'état d'esprit paranoiaque qui convient), soit on utilise les procédures conseillées et établies. Pour ce qui est du mot de passe, le hacher avec un algo correct (sha-2) et le saler (utilisation du nonce - Number used ONCE) est une base irréprochable.


ps: je n'ai pas cryptanalysé tout le code, mais puisqu'une chaine de sécurité n'a que la résistance de son maillon le plus faible, ici (sans considérer l'insécurité dans l'architecture et la plate-forme utilisée) md5, qui ne produit qu'un hash de 128 bits. Or comme la résistance d'un hash se calcule en la divisant par deux (principe du birthday attack, voir doc), on n'offre ici qu'une sécurité de 64 bits, des années-lumière à celle prétendue de 256 bits offerte par AES (aka rijndael). De plus, md5 étant brisé, il n'y pas plus aucune sécurité du tout. :wink:

Re: [RESOLU] Généraliser une "fonction"

Posté : 30 juil. 2012, 09:23
par Fre3z69
merci pour ton intervention.

En fait je te rassure, je n'utilise pas ce système dans un espace membre ou autre site internet, mais seulement en local afin d'avoir une liste de tout mes mdp.

Pour des questions de sécurités, si jamais je met mon serveur local enligne, j'aimerais pas qu'on est mes mots de passes qui sont dans la bdd.

Donc j'ai fait une sécurité sommaire, sachant que ce "logiciel" à un but unique, me servir de mémo ^^

Merci en tout cas

Cordialement

Re: [RESOLU] Généraliser une "fonction"

Posté : 30 juil. 2012, 21:29
par Berzemus
Ah, bon, d'accord, j'ai eu peur un moment (ceci dit, l'auteur des deux fonctions initiales prévoyait peut être de les utiliser sur un site.. :? ).

C'est un exercice utile, mais n'oublie pas qu'il y à des logiciels qui le font aussi ( genre http://keepass.info/ ) et qui offrent un peu plus de sécurité (et si tu venais à perdre une clé usb sur laquelle seraient stockées toutes tes données ?).

Et pour compléter ma diatribe de ce matin, la meilleure chose a faire concernant les mots de passe (autre que de passer vers la cryptographie à clé publique) est de les dériver (avec une boucle de quelques milliers de hashs, en fonction des performances des ordis) avec PBKDF2 ou Bcrypt.