zoukankan      html  css  js  c++  java
  • gpg加密使用

    GPG一般是两方用来加密发送信息的。

    使用对方的公钥进行加密,可以确保只有对方才能用他的私钥解密。
    使用自己的私钥对消息签名,可以确保对方用自己的公钥验证消息的确源自自己。

    生成gpg秘钥对

    gpg --generate-key
    

    之后会询问用户名、邮箱以及密码,最后会需要大量的随机数(这里我等了十分钟以上才好)

    导出公钥和私钥

    私钥导出

    一般私钥导出是为了在其他机器上解密文件

    # 获取私钥id
    gpg --list-secret-keys
    
    # 导出私钥到文件
    gpg --export-secret-keys $ID > my-private-key.asc
    
    # 在另一台机器上导入
    gpg --import my-private-key.asc
    
    # 如果另一台机器上已经存在,则可以先删除
    gpg --delete-keys 
    gpg --delete-secret-keys
    

    公钥导出

    # 查看有哪些公钥可导出
    gpg --list-keys
    
    # 导出指定公钥
    gpg --output blake.gpg --armor --export alice@cyb.org
    
    # 导入
    gpg --import blake.gpg
    
    # 确认key有效
    gpg --edit-key alice@cyb.org
    >fpr
    ># 注意这里trust要选择5,后面签名才能不用再确认
    >trust
    >check
    

    使用

    加密

    gpg --encrypt --armor --recipient recipient_email $file
    

    解密

    gpg --decrypt --output {outputfile} message-for-me.gpg
    

    缓存

    通常情况下,使用gpg 解密后,gpg agent会缓存输入的密码一段时间。
    如果需要强制不进行缓存,每次都提示输入密码

    创建~/.gnupg/gpg-agent.conf 文件,并增加以下内容:

    default-cache-ttl 1
    max-cache-ttl 1
    

    然后重启gpg agent:

    echo RELOADAGENT | gpg-connect-agent
    

    通过命令行提供密码

    如果想在脚本中进行解密,一般是不希望弹出密码框,而是直接通过命令提供。
    命令如下:

    gpg --pinentry-mode loopback --batch --yes --passphrase "${passphrase}" --output ${output_file_name} --decrypt ${file_to_decrypt}
    

    这里关键有两点:

    1. 必须增加--batch选项,否则--passphrase选项无效,这是在man手册里有说的
    2. 必须增加--pinentry-mode loopback选项,否则仍然提示密码框,这个手册中没说,搜索了很久才知道如何解决(这个回答
  • 相关阅读:
    夺命雷公狗---PDO NO:9 使用PDO准备语句并执行语句3
    夺命雷公狗---PDO NO:9 使用PDO准备语句并执行语句2
    [LeetCode] Lowest Common Ancestor of a Binary Search Tree
    二叉树
    LeetCode Palindrome LinkList
    LeetCode Same Tree
    LeetCode Merge Sorted List
    LeetCode Remove Duplicated from Sorted List
    LeetCode Climbing Stairs
    LeetCode Count And Say
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608977.html
Copyright © 2011-2022 走看看