2012-02-17 36 views
23

Tôi nhận được bản thực thi Cipher với Cipher.getInstance(String algorithm). Tôi theo ấn tượng rằng các tên thuật toán có sẵn mà tôi có thể vượt qua khác nhau dựa trên những thư viện có mặt trong classpath của tôi.Tôi có thể liệt kê các thuật toán mã hóa có sẵn như thế nào?

Tôi muốn viết một chương trình đơn giản mà tôi có thể chạy với các classpath khác nhau sẽ liệt kê các tên thuật toán mã hóa có sẵn. Tôi cần gọi phương thức nào để nhận danh sách này?

Trả lời

17

Khi tôi có danh sách nhà cung cấp, như được mô tả trong bài đăng của JB Nizet, tôi vẫn không có danh sách thuật toán. Tôi thấy rằng mỗi nhà cung cấp có chức năng như một đối tượng thuộc tính, và các thuộc tính mã hóa các tên thuật toán. Tôi không hoàn toàn rõ ràng nếu đây là cách chính xác để tìm kiếm chúng hay không, và chính xác tất cả các thuộc tính khác có ý nghĩa gì, nhưng tôi đã viết một thói quen đã phun tất cả các thuộc tính vào System.out và grepped cho các chuỗi mô tả những gì Tôi đang tìm kiếm cho đến khi tôi tìm thấy nó.

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

Yup, tôi sử dụng cùng một phương pháp nhưng với biểu thức chính quy để tìm kiếm các thuật toán trong một số nhà cung cấp. Hầu hết thời gian tốt hơn là xem danh sách vì tài liệu có thể đã lỗi thời (hoặc trong nhiều trường hợp, null). Điều khó hiểu là biết các thuật toán thực sự là gì, vì không có lời giải thích nào được cung cấp ở bất cứ đâu. Lưu ý rằng có nhiều "bí danh" mà bạn có thể muốn xóa khỏi danh sách nếu bạn chỉ kiểm tra xem một thuật toán đã được triển khai hay chưa. –

+0

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

15

Các doc của Cipher.getInstance() nói:

Lưu ý rằng danh sách các nhà cung cấp đăng ký có thể được lấy ra qua Security.getProviders() phương pháp

Nhấp vào liên kết dẫn đến doc của Nhà cung cấp có phương thức getServices() được tài liệu hóa bởi:

Nhận bộ không thể sửa đổi tất cả các dịch vụ hỗ trợ ted bởi nhà cung cấp này.

Và nhấp vào liên kết dẫn đến tài liệu của Nhà cung cấp có phương thức getAlgorithm().

Lưu ý rằng đây là một phương pháp rất thực nghiệm. Một phương pháp hợp lý hơn sẽ là đọc tài liệu của các thư viện mã hóa bạn đang sử dụng. Nó phải chứa danh sách các thuật toán được hỗ trợ.

Bất kể bạn chọn phương pháp nào, đọc tài liệu sẽ giúp ích rất nhiều.

+0

Cảm ơn bạn. Tôi hoàn toàn bỏ qua những bình luận về Security.getProviders() khi tôi đọc tài liệu, và tôi đã khá hoang mang lý do tại sao nó xuất hiện không có gì ở đó. – skiphoppy

Các vấn đề liên quan