Sau khi tôi đã đọc các bài viết về các phương pháp Mật mã (Đối xứng và Không đối xứng). Nhiều bài viết nói rằng Khóa riêng được sử dụng để mã hóa và giải mã dữ liệu. Khoá công khai được sử dụng để mã hóa dữ liệu.But Khi nào Tôi cố gắng để bắt đầu thực hiện trong Java Tôi không thể sử dụng khóa riêng để mã hóa và giải mã dữ liệu (Tôi đang sử dụng thuật toán RSA)? Nếu có thể, vui lòng cung cấp cho tôi liên kết .Nếu nó không hỗ trợ, vui lòng trả lời tại sao nó không hỗ trợ?Mã hóa và giải mã bằng khóa riêng trong Java
// Mã hóa
Cipher encrypt=Cipher.getInstance("RSA");
encrypt.init(Cipher.ENCRYPT_MODE, privatekey);
byte[] encryptedMessage=encrypt.doFinal(msg.getBytes());
// Decrypt
Cipher decrypt=Cipher.getInstance("RSA");
decrypt.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedMessage=decrypt.doFinal(encryptedMessage);
Không phải là mã hóa ký mật mã với khóa bí mật? –
@PeterBecker Tốt hơn là không nên nghĩ về nó theo cách đó. Kiểm tra [RFC 3447 phần 5.2] (http://tools.ietf.org/html/rfc3447#page-12): "... Hoạt động toán học chính trong mỗi nguyên thủy là lũy thừa, như trong mã hóa và giải mã nguyên thủy của Phần 5.1 RSASP1 và RSAVP1 giống với RSADP và RSAEP ngoại trừ tên của các đối số đầu vào và đầu ra của chúng; chúng được phân biệt vì chúng được dùng cho các mục đích khác nhau. ". Điều này chỉ đúng đối với "sách giáo khoa" hoặc RSA "thô", không phù hợp với mục đích mã hóa thông thường. Padding là một phần không thể tách rời của lược đồ và khác nhau. –
Điểm chụp. Tôi thực sự đã tìm thấy một chương trình mã hóa bị hỏng khi đã sử dụng RSA thuần túy (vấn đề một) và hai phím đã được sử dụng sai cách. Lâu đài Bouncy cho phép bạn làm điều đó và sau đó lặng lẽ thay đổi padding, mà trong trường hợp này có nghĩa là không có ngẫu nhiên trên mã hóa. –