2011-01-27 27 views
11

Tôi có thể sử dụng cùng một đối tượng Cipher trên nhiều phương pháp vì các đối số phương thức cho getInstanceinit không thay đổi?Đối tượng mật mã có thể tái sử dụng được không?

Ví dụ: giả sử nhiều phần của ứng dụng sử dụng phương thức decrypt trong lớp tiện ích. Tất cả các giá trị được mã hóa được truyền đều được tạo bằng cách sử dụng cùng một khóa và thuật toán. Vì vậy, tôi có thể tái sử dụng cùng một đối tượng Cipher không?

Thực sự đáng lo ngại về nhiều sáng tạo của Cipher (điều này có thể dẫn đến việc tạo ra các đối tượng KeySpec, SecretKey)?

Trả lời

-5

Bạn có thể sử dụng lại đối tượng mật mã nhưng bạn phải khởi chạy nó mỗi lần bằng cách gọi init() cho mọi thao tác.

Nếu bạn lo lắng về việc tạo lại KeySpec, bạn nên lưu và sử dụng cùng một giá trị trong nhiều init().

+0

Cảm ơn bạn đã trả lời. Chỉ cần để xác nhận, bạn có nghĩa là một lời gọi init() phải cho mỗi doFinal()? – Firefox

+9

Khi Javadocs cho doFinal() ghi rõ, "Sau khi kết thúc, phương thức này đặt lại đối tượng mật mã này về trạng thái nó đã được khởi tạo trước đó thông qua lời gọi tới init. Đó là, đối tượng được đặt lại và có sẵn để mã hóa hoặc giải mã (tùy thuộc vào chế độ hoạt động được chỉ định trong cuộc gọi đến init) nhiều dữ liệu hơn. " –

+5

GregS là chính xác. Câu trả lời này là sai. Thật không may, các trình thủ thuật stackoverflow sẽ không cho phép tôi hoàn tác upvote sai lầm của mình vì nó bây giờ đã "bị khóa". Trình thuật sĩ lựa chọn thiết kế kém. – Nemi

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