Bonjour,
Comment je peux crypter un mot de passe qui est stocké dans un variable "String" avant de l'envoyer sur le réseau?
J'espère que vous pouvez m'aider,
Et merci d'avance.
Bonjour,
Comment je peux crypter un mot de passe qui est stocké dans un variable "String" avant de l'envoyer sur le réseau?
J'espère que vous pouvez m'aider,
Et merci d'avance.
Peut être que ça t'aideras : java2s
Le 10ème post de ce topic contient une classe plus récente prenant en charge MD5 et SHA1.
Donc pour répondre à ta question, soit tu hashes ta chaine, sauf que cela implique d'avoir nécessairement le hash de l'autre côté de ta connexion pour faire la comparaison, soit tu chiffres la connexion (SSL).
Merci pour vous mais vous avez très compliqué le problème.
En fait ce n'est qu'un chiffrement d'une chaine de caractère.
Merci pour vous mais vous avez très compliqué le problème.
fais comme tu le sens![]()
Pour chiffrer chiffrer un mot de passe à destination d'un réseau de manière réellement sécurisé, il faut:
Coté serveur généré une pair clé public/clé privé:
Transmettre la clé public au client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SecureRandom sr = new SecureRandom(); KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(keysize, sr); KeyPair keypair = keyGen.generateKeyPair(); PrivateKey privateKey = keypair.getPrivate(); PublicKey publicKey = keypair.getPublic();
Coté client, chiffrer le mot de passe avec la clé public:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 //Coté serveur: //récupère le tableau d'octets de la clé public byte[] key = publicKey.getEncoded(); //envoyer le tableau d'octet ... //Coté client //récupère le tableau d'octets de la clé public à partir du réseau byte[] key = ... //Construit l'instance de la clé public X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);
Sur le serveur, déchiffrer avec la clé privé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] cryptedPassword = cipher.doFinal("monmotdepasse".getBytes()); //Transmettre cryptedPassword via le réseau ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //Récupérer sur le réseau le mot chiffré byte[] cryptedPassword = ... //déchiffrer Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); byte[] uncryptedPassword = cipher.doFinal(cryptedPassword); String motdepasse = new String(uncryptedPassword);
Et si t'as un serveur intermédiare rogue qui s'installe entre les deux cette technique sert à rien (tu recevra coté client la clé publique du serveur rogue qui aura tout le loisir de décrypter le mot de passe pour le réencrypter à destination du vrai serveur)
La manière simple la plus sure reste de mettre en place une connection ssl ou tls, tout sera crypté dedans et ce protocole a subit suffisament de crypto analyse que pour etre considéré a l'heure actuelle comme fiable (à condition de bien l'utiliser). Si tu veux passer par d'autre méthodes, faut commencer par des cours de cryptographie car utiliser les algorithme n'importe comment n'apporte aucune sécurité
![]()
Tu a tout a fait raison, j'ai voulu faire simple dans mon exemple, mais effectivement une architecture PKI est indispensable pour garantir que l'auteur et le destinataire sont bien ceux attendu.
Est ce que c'est possible la méthodes de ajmaster avec l'utilisation des certificat X509 ou c'est le mm pb.
Si c'est le mm pb s'il vous plait donnez moi un code java (exemple) qui permet d'exploiter la solution de tchize, car je n'ai aucune idée sur l'utilisation du protocole ssl ou tls avec du java.
Merci d'avance.
les certificats X509 servent principalement aux protocoles ssl et tls. Pour utiliser du ssl/tlc, il suffit d'utiliser le SSLSocket
S'il vous plait tchize, je serai très reconnaissante si vous pouvez m'aider, et me donner un exemple car je suis un peu pressée par le temps, et vraiment bloquéeet j'ai perdu beaucoup de temps dans ce problème.
Merci d'avance.
la doc de SSLSocketFactory: http://javasearch.developpez.com/j2s...etFactory.html
la doc de SSLSocket: http://javasearch.developpez.com/j2s...SSLSocket.html
la doc de SSLServerSocket: http://javasearch.developpez.com/j2s...verSocket.html
quelques code d'exemple de sun:
http://javasearch.developpez.com/sun...lientAuth.java
http://javasearch.developpez.com/sun...ketClient.java
Merci beaucoup tchize_, mais j'ai pas pu résolu mon pb.
Donc, voila j'explique encore:
Donc mes pbs sont:Mon réseau=(client+certificat) et (serveur+certificat)
Le client se connecte au serveur par un numero de port et un nomserver
les deux entités ont échangé leurs certificats
aussi le serveur possede une base de données dans laquelle stocker les informations de ses clients.
Pour que le client peut obtenir un service à partir du client il faut envoyer son loginet son password.
1. mot de passe doit être chiffrer dans la base de données du serveur
2. Le client doit chiffrer le mot de passe avant de l'envoyer sur le réseau
Donc je sais qu'il faut pas obtenir des solutions sur des plateaux d'argents mais je suis vraiment obliger de demander de l'aide . Donc si qq'1 de vous a une solution avec du java je serai très reconnaissante.
Merci encore
a priori, sauf si tu veux l'utiliser pour l'authentification, t'as pas besoin de certificat coté client. Et si tu utilise un certificat client, le mot de passe deviens inutile.
pour chiffre le mot de passe dans la base de donnée serveur, on utilise généralement un hashage genre md5
c'est bon c'est une solution simple et compréhensible.pour chiffre le mot de passe dans la base de donnée serveur, on utilise généralement un hashage genre md5
Et à propos le principe:
J'ai fait une authentification mutuelle par certificats entre le client et le serveur pour valider la connexion et puis pour accéder aux services du serveur j'utilise l'authentification par mot de passe et pour que le serveur connait le client.
a partir du moment ou le client a un certificat, le serveur sais qui il est via ce certificat, le login/mot de passe deviens inutile. Note qu'en ssl l'utilsation d'un certificat coté client est assez rare, par rapport à l'utilisation du ssl en lui même. Seul le certificat serveur est indispensable. Fournir des certificat clients, en plus, c'est ajouter beaucoup de boulot de maintenance pour les générer pour chaque client![]()
En fait tout dépend des contraintes. Dans certains cas on ne veut autoriser la connexion au server qu'à certains clients qui sont autorisés par une identité bien établie. Dans ce cas, le certificat client est bien plus sûr qu'un login/mdp, et l'accès au site en soit est impossible à qui n'a pas un certificat accepté par le server (il ne verra pas une seule page -> pas d'attaque par injection SQL ou autre possible). Bien sûr ça devient plus lourd à gérer la PKI derrière et faut le faire très rigoureusement sinon ça peut faire très mal
Certaines banques commencent à utiliser ce principe : il est indispensable pour le client d'être sûr qu'il parle bien avec le server de sa banque (ça se fait toujours avec SSL de vérifier que le server est le bon), mais la banque a aussi surement envie d'être sûre que le client qui se connecte est aussi u vrai client... Là le certificat client est bien pratique![]()
Partager