tik*_*tak 21 ruby encryption ruby-on-rails encryption-asymmetric public-key-encryption
我正在寻找一种文件加密/解密算法,它满足以下要求:
是否有建议算法的Ruby实现?
bri*_*ice 32
注意:正如评论中提到的浮雕一样,这个答案很适合实际系统.首先,不应使用此方法执行文件加密(例如,lib提供AES).其次,这个答案并未解决任何影响您如何设计解决方案的更广泛问题.
原始资料也涉及更多细节.
Ruby可以使用openssl来做到这一点:
#!/usr/bin/env ruby
# ENCRYPT
require 'openssl'
require 'base64'
public_key_file = 'public.pem';
string = 'Hello World!';
public_key = OpenSSL::PKey::RSA.new(File.read(public_key_file))
encrypted_string = Base64.encode64(public_key.public_encrypt(string))
Run Code Online (Sandbox Code Playgroud)
并解密:
#!/usr/bin/env ruby
# DECRYPT
require 'openssl'
require 'base64'
private_key_file = 'private.pem';
password = 'boost facile'
encrypted_string = %Q{
...
}
private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file),password)
string = private_key.private_decrypt(Base64.decode64(encrypted_string))
Run Code Online (Sandbox Code Playgroud)
从这里开始
emb*_*oss 11
我担心你在这里混合了两个概念,即身份验证/授权和机密性,试图在一个步骤中涵盖这两个方面,这是行不通的.您永远不应该使用非对称算法加密"真实数据".a)它们太慢了,b)有一些微妙的问题,如果做得不好,将严重削弱你的解决方案的安全性.
一个好的经验法则是,您应该最终使用私有非对称密钥进行加密,这是由更快的对称算法使用的对称密钥.但在几乎所有情况下,你甚至不应该这样做,因为在你真正想要的90%的病例是在这些情况下,TLS(SSL) -我试图解释为什么这里前一阵子.
在您的情况下,我认为要求是:
要存储在数据库中的数据的机密性:一般公众不应该能够读取它(甚至访问它)
选定的少数人(可能只是一个人)应该能够访问和读取该数据
通常通过使用对称加密来实现第一个目标.第二个目标虽然是相关的,但却是通过完全不同的方式实现的.您希望访问该文件的用户进行身份验证(即建立身份),最重要的是您还希望他们获得授权(即检查已建立的身份是否有权按照他们的意图执行).这是非对称密码术可能进入阶段的地方,但不一定如此.由于你的问题用Rails标记,我假设我们正在讨论Rails应用程序.您通常已经有一些方法来对那里的用户进行身份验证和授权(很可能涉及上述TLS),您可以简单地重用它们以便为实际文件加密/解密建立对称密钥.如果您想要避免不对称加密,基于密码的加密将适合此目的.如果您还想确保已经保密的数据的完整性,事情变得更加复杂,也就是说,您希望为经过身份验证和授权的用户提供一种保证,即他们最终访问的内容没有以任何方式被更改同时.
为此制定解决方案将不是一件轻而易举的事,并且在很大程度上取决于您的要求,所以我担心没有适合每个人的"黄金方式".我建议做一些研究,更清楚地了解你想要达到的目标和方法,然后尝试获得有关你仍感到不确定/不舒服的主题的额外建议.
| 归档时间: |
|
| 查看次数: |
21096 次 |
| 最近记录: |