我正在寻找一个符合以下要求的文件加密/解密算法:
- 算法必须可靠
- 对于相当大的文件,算法应该具有较快的速度
- 私钥可以通过某些参数(例如密码)生成
- 生成的私钥必须与公钥兼容(公钥仅生成一次并存储在数据库中)
是否有建议算法的Ruby实现?
我正在寻找一个符合以下要求的文件加密/解密算法:
是否有建议算法的Ruby实现?
请注意:正如emboss在评论中提到的那样,这个答案并不适合实际系统。首先,文件加密不应使用此方法(例如,该库提供了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))
并进行解密:
#!/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))
来自这里
对称加密绝对快速,并支持流式传输非常大的文件。
SymmetricEncryption::Writer.open('my_file.enc') do |file|
file.write "Hello World\n"
file.write "Keep this secret"
end
对称加密是为组织内部的数据和大文件加密而设计的。
如果需要与其他组织共享文件,则最好选择PGP。对于使用PGP流式传输非常大的文件,请考虑: IOStreams
IOStreams.writer('hello.pgp', recipient: 'receiver@example.org') do |writer|
writer.write('Hello World')
writer.write('and some more')
end
cryptosystem
。只需配置您的私钥路径和密码以及您的公钥路径,它就会完成其他工作。rsa = Cryptosystem::RSA.new
rsa.encrypt('secret') # => "JxpuhTpEqRtMLmaSfaq/X6XONkBnMe..."
解密:
encrypted_value = rsa.encrypt('secret') # => "Y8DWJc2/+7TIxdLEolV99XI2sclHuK..."
rsa.decrypt(encrypted_value) # => "secret"
cipher.key = KEY
这样将其设置为aes密钥,其中KEY是OpenSSL :: PKey :: RSA实例。这样做的方式正确吗?http://stackoverflow.com/q/40760184/4477305 - CodecPM