Tôi đang triển khai và công cụ mã hóa AES cho PBE trong Android và tôi đã tìm thấy hai cách để triển khai tạo IV và tôi muốn biết cái nào tốt hơn và an toàn hơn để nhận IvParameterSpec
:Tạo ngẫu nhiên IV cho AES trong Java
Phương pháp # 1:
SecureRandom randomSecureRandom = SecureRandom.getInstance("SHA1PRNG");
byte[] iv = new byte[cipher.getBlockSize()];
randomSecureRandom.nextBytes(iv);
IvParameterSpec ivParams = new IvParameterSpec(iv);
Phương pháp # 2:
AlgorithmParameters params = cipher.getParameters();
byte[] iv2 = params.getParameterSpec(IvParameterSpec.class).getIV();
ivParams = new IvParameterSpec(iv2);
tôi sẽ kiểm tra nó, ngày mai , hiện tại tôi không thể. Cảm ơn bạn – user1576396
tôi đã sửa đổi mã như sau: SecureRandom random = SecureRandom.getInstance (PRNG_ALGO); random = new SecureRandom(); Log.d ("generateSalt", "Thuật toán được chọn bởi SO:" + random.getAlgorithm()); Nhật ký cho thấy điều này: D/generateSalt ﹕ Thuật toán được chọn bởi SO: SHA1PRNG SO bản ngã được chọn là SHA1PRNG – user1576396
Thật tuyệt vời, nhưng SHA1PRNG bị xác định là không đúng và có thể khác nhau giữa các lần triển khai. Ngay cả khi nó có sẵn nó có thể không phải là lựa chọn tốt nhất có sẵn wrt an ninh và hiệu quả. Như đã chỉ ra, tôi sẽ sử dụng hàm tạo không đối số cho 'SecureRandom' để thay thế. –