2011-12-12 37 views
9

Tôi có mảng byte của Khóa công cộng RSA. Tôi tìm thấy trên internet mà tôi có thể tạo ra một đối tượng PublicKey thực sự của nó bằng cách sử dụng mã này:Java: Cách tạo Khóa công cộng RSA từ chuỗi

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(bytes)); 

Nhưng mỗi khi tôi chạy mã này, tôi nhận được một kết quả khác cho dữ liệu được mã hóa bằng khóa đó. Tôi chắc chắn dữ liệu tôi muốn mã hóa luôn giống nhau, vì vậy mảng byte biểu thị khóa.

Điều này có bình thường không?

Dưới đây là mã của tôi luôn sản xuất ra khác:

byte[] keyBytes = Base64.decodeBase64(rsa_1024_public_key); 
     // rsa_1024_public key is a constant String 

Cipher c = Cipher.getInstance("RSA"); 

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(keyBytes)); 

c.init(Cipher.ENCRYPT_MODE, publicKey); 

return c.doFinal(password.getBytes()); 

Đây có lẽ là một phần của thuật toán mã hóa bất đối xứng?

Cảm ơn.

+0

RSA không xác định. – SLaks

+0

@SLaks: Bạn có muốn đăng câu trả lời đó không? Đó là chính xác: D Tôi sẽ cung cấp cho 35 điểm rep. –

+0

Thực ra, 15; Tôi đã đạt giới hạn đại diện từ lâu rồi. :) – SLaks

Trả lời

7

RSA không xác định.

Bạn có thể làm cho nó xác định bằng cách chọn chế độ đệm không ngẫu nhiên; tuy nhiên, điều đó sẽ không an toàn.

+0

Tôi sẽ cho mười tuần sau oke? –

+0

Đừng bận tâm; Tôi thường đạt đến giới hạn đại diện mỗi ngày trong tuần. – SLaks

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