La classe SecureRandom en Java fournit un générateur de nombres pseudo-aléatoires sécurisé sur le plan cryptographique et destiné aux applications sensibles.
Dans cet exemple, nous ne l’utilisons pas aux fins pour lesquelles il a été conçu, mais nous présentons plutôt ses méthodes dans un générateur de mot de passe simple.
1. Générateur de mots de passe à l’aide de Secure Random
Une convention que nous avons définie pour notre générateur de mot de passe est que le mot de passe final peut être composé des lettres majuscules A-Z, des lettres minuscules a-z, des chiffres de 0 à 9 et des symboles #, $,%, & et @.
PasswordGenerator.java
package com.techfou.passwordgen; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collections; public class PasswordGenerator { private SecureRandom srand; private ArrayList validch; public PasswordGenerator() throws NoSuchAlgorithmException, NoSuchProviderException { srand = new SecureRandom(); validch = new ArrayList<>(); //Filling the ArrayList with the characters we want to use based on ascii table: //https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html for (int i = 65; i < 91; i++) { validch.add((char) i);//A-Z validch.add((char) (i + 32));//a-z } for (int i = 48; i < 58; i++) { validch.add((char) i); } for (int i = 35; i < 39; i++) { validch.add((char) i); } validch.add((char) 64); Collections.shuffle(validch); } public char randChar() { return (char) this.validch.get(srand.nextInt(this.validch.size())); } public static void main(String[]args) throws NoSuchAlgorithmException, NoSuchProviderException, UnsupportedEncodingException { PasswordGenerator pg = new PasswordGenerator(); StringBuilder sb = new StringBuilder(); for (int j = 0; j < 10; j++) {//Generate 10 passwords for (int i = 0; i < 10; i++) {//Passwords are 10 characters long sb.append(pg.randChar()); } System.out.println(sb.toString()); sb.setLength(0); } } }
Sortie:
s96g9RH%BH %Cs5DjHgRD xGea5Kb&5b QomXOfC98s BU0s%gqK6J 0yOkL%SHrT j@drmKSwhy aKwriP#xd9 XxdjIT7jr@ Qd7OE1RYNi
Dans l’exemple ci-dessus, nous avons appelé
SecureRandom
avec le constructeur par défaut. Au lieu de cela, nous aurions pu lancer le
SecureRandom
en utilisant un algorithme et un fournisseur. En fonction des besoins de notre application, nous pouvons être amenés à spécifier un fournisseur, mais en général, il est bon de s’abstenir et de permettre au système d’utiliser l’algorithme avec la priorité la plus élevée.
2. Définition de la graine sur SecureRandom
SecureRandom
nous donne la possibilité de définir la graine via la méthode` .setSeed ()
. Cette méthode peut recevoir un nombre long ou un tableau d’octets. Evitez de placer le `SecureRandom
car cela compromettra presque toujours la sécurité du générateur aléatoire; laissez-le plutôt utiliser son mécanisme d’ensemencement interne. Cela ne signifie pas qu’une graine doit être utilisée indéfiniment. Pour les applications qui utilisent beaucoup de nombres aléatoires, vous devriez générer un nouveau
SecureRandom
régulièrement, car cela créera un nouveau générateur avec un nouveau germe.
Références
8 Améliorations de la sécurité]. https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html/11
Classe aléatoire]. https://docs.oracle.com/javase/8/docs/api/java/security/Provider.html [Provider
Classe]
lien://tag/guest-post/[message invité]lien://tag/java-security/[java sécurité]lien://tag/mot de passe/[mot de passe] nombres aléatoires security