【问题标题】:Decrypt *.csv.gpg file using public / private key使用公钥/私钥解密 *.csv.gpg 文件
【发布时间】:2018-07-31 19:04:13
【问题描述】:

我需要解密一个 .csv.pgp 文件,该文件应使用公开共享的公钥/私钥解密。

我试图找到一些资源 https://github.com/rocketjob/rocketjob/wiki/PGP-Encryption-with-Ruby Ruby: file encryption/decryption with private/public keys 但没有成功。

提前致谢!

【问题讨论】:

    标签: ruby encryption


    【解决方案1】:

    假设你有一个Gemfile 喜欢:

    source 'https://rubygems.org'
    
    gem 'iostreams', '~> 0.14.0'
    

    以下脚本将提示您输入接收者的密钥 ID 和密码

    require 'rubygems'
    require 'bundler/setup'
    require 'io/console'
    
    require 'iostreams'
    
    csv_filename = './data.csv'
    encrypted_filename = './secure.pgp'
    csv_data = File.read(csv_filename)
    
    puts "Generating sender's key..."
    signer_passphrase = 'somethingreallysecure'
    sender_key_id = IOStreams::Pgp.generate_key(
      name:       'Sender',
      email:      'sender@example.org',
      passphrase: signer_passphrase
    )
    
    puts 'Enter receiver key ID:'
    receiver_key_id = gets.strip
    
    puts "Downloading receiver's key..."
    puts `gpg --keyserver keyserver.ubuntu.com --recv #{receiver_key_id}`
    
    puts "Encrypting #{csv_filename} to #{encrypted_filename}"
    sender_key = IOStreams::Pgp.list_keys(key_id: sender_key_id).first
    receiver_key = IOStreams::Pgp.list_keys(key_id: receiver_key_id).first
    
    IOStreams::Pgp::Writer.open(
      'secure.pgp',
      recipient:         receiver_key[:email],
      signer:            sender_key[:email],
      signer_passphrase: signer_passphrase
    ) do |output|
      output.puts(csv_data)
    end
    
    puts "Decrypting #{encrypted_filename}"
    puts 'Enter receiver passphrase:'
    receiver_passphrase = STDIN.noecho(&:gets).chomp
    decrypted_data = ''
    IOStreams::Pgp::Reader.open('secure.pgp', passphrase: receiver_passphrase) do |stream|
      decrypted_data += stream.read(10) until stream.eof?
    end
    
    puts ''
    puts 'Source data'
    puts '--------------'
    puts csv_data
    puts '--------------'
    puts ''
    puts 'Decrypted data'
    puts '--------------'
    puts decrypted_data
    puts '--------------'
    

    您可能缺少的一点是调用从公共服务器为收件人下载(“接收”)密钥。

    感谢RocketJob docs 在这里的一些工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-17
      • 2012-04-11
      • 2017-01-04
      • 2016-12-31
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多