2012-04-10 97 views
7

我找不到一個如何做到這一點的例子。我有一個PGP加密的XLS文件和一個PGP密鑰。這裏的是我的代碼,返回一個空字符串:如何用Ruby解密PGP加密文件gpgme

require 'rubygems' 
require 'gpgme' 

def passfunc(obj, uid_hint, passphrase_info, prev_was_bad, fd) 
    io = IO.for_fd(fd, 'w') 
    io.puts "PASSPHRASE" 
    io.flush 
end 

encrypted_data = GPGME::Data.new(File.open("file.xls.pgp")) 
key = GPGME::Data.new(File.open("key.txt")) 

ctx = GPGME::Ctx.new :passphrase_callback => method(:passfunc) 
ctx.import_keys key 

decrypted = ctx.decrypt encrypted_data 

puts decrypted.read 

我能夠解密該文件在一個名爲使用相同的密鑰在Windows GNU隱私助手程序。任何幫助表示讚賞。

回答

6

大樹上野,紅寶石GPGME的開發商向我伸出手在GitHub上:

decrypted = ctx.decrypt encrypted_data後加入decrypted.seek(0)似乎解決了問題

+1

感謝。有時我覺得GPGME的'E'代表'Enigmatic' – aidan 2014-09-22 04:16:11

+0

@Vincent什麼是obj,uid_hint,passphrase_info,prev_was_bad,fd參數。在我的情況下,客戶端只共享公鑰 - 私鑰和加密文件 – VKatz 2018-02-22 06:59:27

+0

@Vincent,請提供你的幫助我是一種沉溺!在之間。 – VKatz 2018-02-22 06:59:56