我有一个使用 PGP 加密进行加密的客户端文件。共享的加密文件为
xlsx
格式。 PGP 私钥也作为文本文件共享(请注意,我为私钥文件添加了 .pgp
扩展名)。
我尝试在 Rails 控制台中使用以下代码解密文件:
crypto = GPGME::Crypto.new
GPGME::Key.import(File.open('private_key.pgp'))
cipthertext = GPGME::Data.new(File.open('encrypted_file.xlsx'))
data = crypto.decrypt cipthertext, {}
但是执行最后一行时出现以下错误:
/.rvm/gems/ruby-3.1.2/gems/gpgme-2.0.24/lib/gpgme/ctx.rb:489:in `decrypt_verify': No secret key (GPGME::Error::NoSecretKey)
我正在使用
gpgme
gem 版本 2.0.24
Rails 版本:7.0.8.1
我尝试为加密文件添加
.gpg
扩展名,将其重命名为“encrypted_file.xlsx.gpg”并再次尝试相同的步骤,但仍然显示相同的错误。
我使用的代码或文件扩展名是否有任何问题?
提前致谢
我没有看到如何加密数据的示例,我只是检查了加密/解密的完整过程,这就是代码的样子
# loading public key for encryption
crypto = GPGME::Crypto.new
GPGME::Key.import(File.open(Rails.root.join('public_key.pgp')))
plaintext = GPGME::Data.new('input text')
# recipient should have your email, equal you used for generating keys
options = { sign: true, signers: '[email protected]', recipients: '[email protected]' }
data = crypto.encrypt plaintext, options
f = File.open(Rails.root.join('encrypted_file.gpg'), 'wb')
bytes_written = f.write(data)
f.close
# loading private key for decryption
GPGME::Key.import(File.open(Rails.root.join('private_key.pgp')))
cipthertext = GPGME::Data.new(File.open(Rails.root.join('encrypted_file.gpg')))
data = crypto.decrypt cipthertext, {}
puts data
以及用于加密/解密的有用链接 - https://dev.to/humbertoa6/pgp-encryptdecrypt-file-with-ruby-on-rails-part-3-3log
并生成 PGP 密钥 - https://dev.to/humbertoa6/pgp-create-a-publicprivate-key-pairpart-2-4a7b