2012-04-10 33 views
7

Tôi không thể tìm thấy một ví dụ đơn giản về cách thực hiện việc này. Tôi có tệp XLS được mã hóa PGP và khóa PGP. Đây là mã của tôi trả về một chuỗi trống:Cách giải mã tệp PGP được mã hóa bằng Ruby 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 

Tôi có thể giải mã tệp này trong chương trình có tên GNU Privacy Assistant trên Windows bằng cùng một khóa. Bất kỳ trợ giúp được đánh giá cao.

Trả lời

6

Daiki Ueno, nhà phát triển của Ruby gpgme đã tìm đến tôi trên GitHub:

thêm decrypted.seek(0) sau dòng decrypted = ctx.decrypt encrypted_data dường như giải quyết vấn đề

+1

Cảm ơn cho việc này. Đôi khi tôi cảm thấy như 'E' của GPGME là viết tắt của 'Enigmatic' – aidan

+0

@Vincent obj, uid_hint, passphrase_info, prev_was_bad, thông số fd là gì. Trong trường hợp khách hàng của tôi đã chia sẻ khóa công khai và khóa riêng tư và tệp được mã hóa chỉ – VKatz

+0

@Vincent, Vui lòng cung cấp trợ giúp của bạn Tôi là loại STUCK! ở giữa. – VKatz

Các vấn đề liên quan