Fonction PHP crypt () en JavaScript

Du côté du serveur, je crée un hash de mot de passe:

public static function salt() { return '$1$' . StringUtil::random(6, array('encode' => StringUtil::ENCODE_BASE_64)); } public static function hash($password, $salt = null) { return crypt($password, $salt ?: static::salt()); } 

Et du côté du client, je veux faire de même avec CryptoJS. Existe-t-il des analogues dans javascript pour PHP crypt (), pas nécessaire avec CryptoJS?

UPD: Je veux faire cela du côté du client parce que je ne veux pas envoyer de mot de passe au serveur, mais quelque chose comme clientId crypté avec hash, décrypter sur le serveur et obtenir le hash pour les manipulations suivantes.

Eh bien, voici: une implémentation CryptoJS de la crypte de PHP pour MD5-hashes (je suppose que c'est trop grand pour coller). Donc, ce n'est pas une chose complète, mais dans votre exemple de code, vous configurez un hachage basé sur MD5 (avec le préfixe de sel $1$ ).

Comment l'utiliser:

  1. Stockez dans un fichier nommé php-crypt-md5.js
  2. Utilisez-le de cette façon ("rollups" se trouve dans votre répertoire CryptoJS, utilisez simplement le bon chemin):

     <script src="rollups/md5.js"></script> <script src="php-crypt-md5.js"></script> <script> function createSalt(len) { var saltAlpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz./-+_" var salt = '$1$'; for(var i = 0; i < len; ++i) { salt += saltAlpha.charAt( Math.floor(Math.random() * saltAlpha.length)); } return salt; } // in your JavaScript code: var salt = createSalt(8); var pw = "your password"; var hash = CryptoJS.PHP_CRYPT_MD5(pw, salt); 

Quel est le but du cryptage sur le client, puis décryptage sur le serveur? Ce n'est pas la sécurité, si toutes les informations relatives au cryptage sont côté client, tout le monde doit faire est de regarder la source JS pour voir quel sel est, il n'y a pas de sécurité là-bas.

Tout le but est d'envoyer des données (sur un canal sécurisé, comme https) au serveur, puis le serveur le hash, et compare ce hash à quelque chose que vous avez déjà enregistré.

La sécurité provient de ce qui se passe sur le serveur, et non de ce que vous faites sur les données avant de les envoyer. Une connexion sécurisée empêchera l'écoute man-in-the-middle, mais tout ce que vous avez sur le client est ouvert, et ne contribue en rien à la sécurité, sauf si vous utilisez des informations non-dans le navigateur (comme Avoir quelqu'un coller dans leur clé publique PGP avec tout ce que vous envoyez, le serveur connaissant déjà la clé privée PGP de cette personne pour la vérification d'authentification), auquel cas les données réelles deviennent inutiles car la clé publique est maintenant la partie importante …

Alors, n'hésitez pas à le faire. Cela vous fait croire que vous êtes en sécurité supplémentaire, alors qu'en réalité, vous n'avez agi que sur les choses.