2013-08-08 47 views
5

Có một lý do nào đằng sau quyết định mà Sun đưa ra trong việc đặt tên chuẩn cho các thuật toán mã hóa thay vì các hằng số được đặt tên không?Tên chuẩn không có các hằng số được đặt tên

Có vẻ như Sun (tốt, giờ là Oracle) đặt ra một nỗ lực rõ ràng trong documenting algorithm names, nhưng không cung cấp các hằng số được xác định rõ ràng có tên trong thư viện. Tôi hiểu rằng, từ quan điểm đa nền tảng, phương pháp tìm kiếm chuỗi là thuận lợi.

Tuy nhiên, khi làm như vậy có nghĩa là lỗi lập trình bị trì hoãn đến thời gian chạy, điều này tôi chỉ có thể thấy việc làm mọi thứ khó khăn hơn mức cần thiết. Tại sao điều này?

+1

Có thể là một vấn đề thiết kế mà chúng chưa khắc phục được. Bạn có thể có các hằng số của riêng bạn (có thể trong một 'enum') trỏ đến tên của các thuật toán. Nó sẽ là tốt hơn để đăng bài này trong diễn đàn Oracle thay vì ở đây. –

+0

@LuiggiMendoza Tôi đã thêm một số lý do bổ sung có thể ảnh hưởng đến việc chọn chuỗi trên các hằng số. Tôi khá chắc chắn rằng đây là một tính năng, không phải là một vấn đề. –

Trả lời

1

Tôi đoán rằng điều này sẽ cho phép bạn tạo ra tên không chuẩn và triển khai nhà máy của riêng bạn. (Hoặc cho phép các plug-in trong tương lai sử dụng tên chưa tồn tại) mà không gây ra lỗi biên dịch.

Điều này cũng sẽ cho phép người dùng thêm các lớp mã hóa mới vào thời gian chạy bằng cách thêm các lớp vào đường dẫn lớp mà không biết tại thời gian biên dịch.

1

String được sử dụng trong ví dụ: Cipher.getInstance(String algorithm) không chứa một tên duy nhất, nó cũng chứa các phép biến đổi. Bạn sẽ có một cái gì đó như "DES/CFB8/NoPadding" cho biết thuật toán DES, trong chế độ Phản hồi mã hóa với đầu ra 8 bit không yêu cầu đệm. Sự kết hợp này có thể được sử dụng mật mã khác. Vì vậy, điều này sẽ tạo ra một số hằng số bằng cipher * modes * bitsizes * paddingmodes. Bây giờ bạn có thể tạo các bảng liệt kê riêng biệt, nhưng bạn đã có thể thấy nơi nó sẽ bắt đầu bị tổn thương.

Chuỗi linh hoạt hơn nhiều so với enums hoặc (thậm chí không đến đó) hằng số. Điều này làm cho nó rất dễ dàng để thêm các thuật toán bổ sung. Bạn thậm chí có thể thêm thuật toán và định cấu hình chúng trong phần mềm cũ hơn; chỉ cần thêm một nhà cung cấp thực hiện thuật toán đã cho. Điều này rất quan trọng khi được sử dụng trong một khung năng động tích hợp từ các nhà cung cấp và dịch vụ.

Như Luiggi đã chỉ ra, thật dễ dàng để tạo một nhà máy có enum và trả về ví dụ Cipher hoặc Signature. Bạn sẽ chỉ phải kiểm tra nhà máy một lần.

+0

Hoặc một bullder có mẫu giao diện thông thạo. –

+0

@LuiggiMendoza chắc chắn, mặc dù cá nhân tôi không thích kiểu thiết kế * đó * nhiều. Vì vậy, bạn sẽ nhận được 'cipherBuilder.setAlgorithm (ALGO) .setMode (MODE) .buildCipher()'? –

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