在 Rails 中使用 PGP 解密解密文件时出错

问题描述 投票:0回答:1

我有一个使用 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”并再次尝试相同的步骤,但仍然显示相同的错误。

我使用的代码或文件扩展名是否有任何问题?

提前致谢

ruby-on-rails ruby encryption pgp gpgme
1个回答
0
投票

我没有看到如何加密数据的示例,我只是检查了加密/解密的完整过程,这就是代码的样子

# 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

© www.soinside.com 2019 - 2024. All rights reserved.