Tôi sợ bạn đang trộn hai khái niệm ở đây, xác thực/ủy quyền và bảo mật, cố gắng bao quát cả hai khía cạnh trong một bước duy nhất và điều đó sẽ không hoạt động. Bạn không bao giờ nên mã hóa "dữ liệu thực" với các thuật toán bất đối xứng. a) chúng quá chậm cho điều đó, b) có những vấn đề tinh tế, nếu không làm đúng, sẽ làm suy yếu nghiêm trọng sự an toàn của giải pháp của bạn.
Một nguyên tắc nhỏ là điều duy nhất bạn nên kết thúc việc mã hóa với tin bất đối xứng phím được đối xứng phím được sử dụng bởi một thuật toán nhanh hơn nhiều đối xứng. Nhưng trong hầu hết các trường hợp, bạn thậm chí không nên làm điều đó, bởi vì trong 90% các trường hợp bạn thực sự muốn là TLS (SSL) trong những trường hợp đó - tôi đã cố gắng giải thích tại sao here cách đây không lâu.
Trong trường hợp của bạn, tôi giả định các yêu cầu là:
tính bảo mật của dữ liệu mà là để được lưu trữ trong cơ sở dữ liệu: công chúng nói chung không nên có thể đọc nó (hoặc thậm chí truy cập vào nó)
một vài lựa chọn (có thể là chỉ một người) nên có thể truy cập và đọc dữ liệu
mục tiêu đầu tiên thường được thực hiện bằng cách sử dụng 012.. Mục tiêu thứ hai là, mặc dù có liên quan, được thực hiện bằng các phương tiện hoàn toàn khác nhau. Bạn muốn người dùng truy cập tệp được xác thực (tức là thiết lập danh tính) và trên hết bạn cũng muốn họ được ủy quyền (tức làkiểm tra xem danh tính đã được thiết lập có quyền làm những gì họ định làm). Đây là nơi mật mã không đối xứng có thể nhập giai đoạn, nhưng không nhất thiết. Vì câu hỏi của bạn được gắn thẻ với Rails, tôi cho rằng chúng ta đang nói về một ứng dụng Rails. Bạn thường có một số phương tiện để xác thực và ủy quyền cho người dùng ở đó (hầu hết có liên quan đến TLS được đề cập ở trên), bạn có thể sử dụng lại chúng để thiết lập khóa đối xứng để mã hóa/giải mã tệp thực. Password-based encryption sẽ phù hợp với mục đích này, nếu bạn muốn tránh mật mã bất đối xứng. Mọi thứ trở nên phức tạp hơn nếu bạn cũng muốn đảm bảo tính toàn vẹn của dữ liệu đã được bảo mật, nghĩa là bạn muốn cung cấp một loại bảo đảm cho người dùng được xác thực và được ủy quyền theo nghĩa là những gì họ truy cập cuối cùng không bị thay đổi theo bất kỳ cách nào trong luc đo.
Phát triển giải pháp cho việc này sẽ không có nhiệm vụ tầm thường và tùy thuộc vào yêu cầu của bạn, vì vậy tôi e rằng không có "cách vàng" phù hợp với mọi người. Tôi sẽ đề nghị làm một số nghiên cứu, có được một bức tranh rõ ràng hơn về những gì bạn đang cố gắng đạt được và làm thế nào, sau đó cố gắng nhận thêm lời khuyên về các chủ đề mà bạn vẫn cảm thấy không chắc chắn/không thoải mái.
Tôi không phải là người Rubyist, nhưng đó là những loại pin khá tốt. Tôi tự hỏi làm thế nào cứng tương đương sẽ được trong python ... – brice
Chỉ muốn thêm các tập tin đó nên được mã hóa với, ví dụ, AES-256, nhưng khóa của nó nên được sended với rsa. – tiktak
Tôi xin lỗi, nhưng đây thực sự là lời khuyên xấu. OP nói về mã hóa/giải mã tệp và bạn không bao giờ nên sử dụng RSA cho điều đó. – emboss