2012-02-17 14 views
23

Otrzymuję implementację szyfrowania z Cipher.getInstance(String algorithm). Mam wrażenie, że dostępne nazwy algorytmów, które mogę przekazać, różnią się w zależności od bibliotek znajdujących się w mojej ścieżce klas.Jak mogę wyświetlić listę dostępnych algorytmów szyfrowania?

Chciałbym napisać prosty program, który można uruchomić z różnymi ścieżkami klas, które będą zawierały listę dostępnych nazw algorytmów szyfrowania. Jaką metodę powinienem zadzwonić, aby uzyskać tę listę?

Odpowiedz

17

Kiedy mam listę dostawców, jak opisano w poście JB Nizeta, wciąż nie mam listy algorytmów. Zauważyłem, że każdy dostawca działa jako obiekt właściwości, a właściwości kodują nazwy algorytmów. Nie jestem do końca jasne, czy jest to poprawny sposób, aby je wyszukać, czy nie, i co dokładnie wszystkie inne właściwości oznaczają, ale właśnie napisałem procedurę, która wypluła wszystkie właściwości do System.out i pomieszała dla różnych ciągów opisujących co Szukałem, dopóki go nie znalazłem.

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)); 
} 
+1

Tak, używam tej samej metody, ale z wyrażeń regularnych, aby szukać algorytmów u kilku dostawców. W większości przypadków lepiej jest przejrzeć listę, ponieważ dokumentacja może być nieaktualna (lub w wielu przypadkach wartość null). Trudne jest, aby wiedzieć, czym właściwie są algorytmy, ponieważ nigdzie nie ma żadnego wyjaśnienia. Zauważ, że istnieje wiele "aliasów", które możesz usunąć z listy, jeśli tylko sprawdzasz, czy algorytm został zaimplementowany. –

+0

Zobacz http://stackoverflow.com/a/3683915/443515 – Qwerky

15

Doc od Cipher.getInstance() mówi:

Należy zauważyć, że lista zarejestrowanych dostawców mogą być pobierane za pośrednictwem Security.getProviders() metoda

klikając na link prowadzi do DOC Dostawca, który ma metodę getServices() udokumentowaną:

Uzyskaj niezmodyfikowany zestaw wszystkich usług ted przez tego dostawcę.

Kliknięcie linku prowadzi do dokumentu Dostawcy, który ma metodę getAlgorithm().

Należy zauważyć, że jest to metoda bardzo empiryczna. Bardziej logiczną metodą byłoby przeczytanie dokumentacji bibliotek kryptograficznych, z których korzystasz. Musi zawierać listę obsługiwanych algorytmów.

Niezależnie od wybranej metody, czytanie dokumentacji bardzo pomaga.

+0

Dziękuję. Całkowicie przeoczyłem komentarz na temat Security.getProviders(), kiedy czytałem dokumentację i byłem raczej zaskoczony, dlaczego wydawało się, że nic tam nie było. – skiphoppy

Powiązane problemy