web-dev-qa-db-fra.com

Comment puis-je lister les algorithmes de chiffrement disponibles?

Je reçois une implémentation de chiffrement avec Cipher.getInstance(String algorithm). J'ai l'impression que les noms d'algorithmes disponibles que je peux transmettre diffèrent en fonction des bibliothèques présentes dans mon classpath.

Je voudrais écrire un programme simple que je peux exécuter avec différents classpaths qui listera les noms d'algorithmes Cipher disponibles. Quelle méthode devrais-je appeler pour obtenir cette liste?

28
skiphoppy

Une fois que j'ai une liste de fournisseurs, comme décrit dans le post de JB Nizet, je n'ai toujours pas de liste d'algorithmes. J'ai constaté que chaque fournisseur fonctionnait comme un objet Propriétés et que les propriétés codaient les noms d'algorithmes. Je ne suis pas tout à fait sûr de savoir si c'est la bonne façon de les rechercher ou non, et ce que toutes les autres propriétés signifient, mais je viens d'écrire une routine qui crache toutes les propriétés dans System.out et accueille différentes chaînes décrivant ce Je cherchais jusqu'à ce que je le trouve.

import Java.security.*;

for (Provider provider: Security.getProviders()) {
  System.out.println(provider.getName());
  for (String key: provider.stringPropertyNames())
    System.out.println("\t" + key + "\t" + provider.getProperty(key));
}
24
skiphoppy

La doc de Cipher.getInstance () dit:

Notez que la liste des fournisseurs enregistrés peut être récupérée via le fichier Méthode Security.getProviders ()

En cliquant sur le lien, vous accédez à la documentation du fournisseur, qui a une méthode getServices () documentée par:

Obtenez un ensemble non modifiable de tous les services pris en charge par ce fournisseur.

Et en cliquant sur le lien, vous accédez au document du fournisseur qui a une méthode getAlgorithm () .

Notez qu'il s'agit d'une méthode très empirique. Une méthode plus logique serait de lire la documentation des bibliothèques de chiffrement que vous utilisez. Il doit contenir la liste des algorithmes pris en charge.

Quelle que soit la méthode que vous choisissez, la lecture de la documentation aide beaucoup.

17
JB Nizet

On dirait que c'est ce dont vous avez vraiment besoin:

https://docs.Oracle.com/javase/7/docs/api/Java/security/Security.html#getAlgorithms(Java.lang.String)

Renvoie un ensemble de chaînes contenant les noms de tous les algorithmes ou types disponibles pour le service cryptographique Java spécifié (par exemple, Signature, MessageDigest, Cipher, Mac, KeyStore).

1
mvmn