• GpG使用指南


    1.GPG简介

      1991年,程序员Phil Zimmermann为了避开政府的监视,开发了加密软件PGP。因为这个软件非常好用,迅速流传开来成为许多程序员的必备工具。但是,它是商业软不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品取名为GnuPG,因此GPG就诞生了。GPG是GNU Privacy Guard的缩写,是自由软件基金会的GNU计划的一部分。它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。一开始,用户通过数字证书认证软件生成一对公钥和私钥。任何其他想给该用户发送加密消息的用户,需要先从证书机构的公共目录获取接收者的公钥,然后用公钥加密信息,再发送给接收者。当接收者收到加密消息后,他可以用自己的私钥来解密,而私钥是不应该被其他人拿到的。

    2.安装GPG

    Linux操作系统

       如今大多数的linux发行版都默认包含了gpg,可用如下命令进行检查:

    # gpg --version

     

     

      若看到如图所示的版本信息,就可直接使用了。否则,你需要从你的发行版软件仓库里安装GPG。

    (1)Mac操作系统:

    安装brew命令

    $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    安装gnupg

    $ brew install gnupg

     

     

    (2)Windows操作系统:

      Windows下可以借助gpg4win软件来实现密钥的生成,具体过程自己摸索,下载地址:https://www.gpg4win.org/

    3.生成密钥

    # gpg --gen-key

     

     

      生成密钥时会出现一大段文字:先是关于软件的介绍和一些版权信息,然后询问你选择哪种加密算法,我选择默认的RSA and RSA,因为目前来说,RSA算法是安全性最强的,它可以用来加密和解密,其他的只能给信息签名。

      这一步会询问密钥长度,默认是2048,直接回车就ok,也可以自己选择长度。如下所示:

      接下来询问你密钥的有效期,默认值0代表永不过期,我选择默认值。然后会让你确认是否正确。选择正确则输入y,下一步要求你输入个人信息,软件通过真实姓名、Email地址和注释来构造用户ID,其中注释可以为空。

      此时用户ID就生成了,系统会向你确认信息是否需要修改:输入N修改姓名,C修改注释,E修改Email,O表示确认,Q退出。我输入字母o确认。

      接下来系统会要求你输入一个口令用里保护你的私钥,强烈建议添加口令!

      然后系统会提示“需要生成大量随机字节”,你可以随意进行一些操作,看看网页啊,打打字什么的,“这会得到足够的熵”(熵在物理学中是微观状态混乱度的度量)。

      如下所示:此时你的公、私钥已经生成并签名!

      其中B9F82B1D是用户ID的hash,可以代替用户ID。最后,建议再生成一个撤销证书,以便以后密钥作废时,请求公钥服务器撤销你的公钥:

    # gpg --ken-revoke [用户ID]

     

    4.密钥管理

    (1)列出密钥

    # gpg --list-keys

     

     

    (2)上传公钥至密钥服务器

      密钥服务器是用来发布你的公钥,并将其分发到其他人的服务器,这样其他用户可以轻松的根据你数据库中的名字(或者e-mail地址)来获取你的公钥,并给你发送加密信息。避免了把公钥直接拷贝给其他人的过程。

    1.上传你的公钥到秘钥服务器:

    # gpg --send-keys  [your pubID]  --keyserver [keyservers.address.com]

    (需要把keyservers.address.com替换成你选择的服务器(或者用mit.edu,它会跟其他服务器做同步))

    2.加密文件

    法一:

    # gpg -o encrypted_file.gpg --encrypt -r key-id original.file

    命令解释:

    (1)-o encrypted_file.gpg = 指定输出文件

    (2)--encrypt = 做加密

    (3)-r = 接收者的KEY-ID,比如这里就填你朋友的KEY-ID。

    (4)original.file = 指定要加密的文件

    法二:

    # gpg --recipient [your pubID]--output out.file  --encrypt original.file

     

     

     

     

     

     

     

    (3)上传公钥

    # gpg  --send-keys [用户ID]  --keyserver hkp://subkeys.pgp.net 

     

     

    (4)在另一台服务器上搜索刚才上传的公钥

    # gpg --search-keys [用户ID]

     

     

    5.加密文件

      加密之前首先得知道对方的公钥,用公钥来加密文件,对方用自己的私钥来解密。可用对方的邮箱搜索他的公钥

    # gpg --list-key wangd8836@gmail.com

     

     

    加密法一:

    # gpg --recipient 49FD19FB --output haha.txt --encrypt haha

     

     

    加密法二:

    # gpg -o encrypted_520.haha --encrypt -r 49FD19FB  haha 

     

     

    将加密后的文件传至另一台服务器

    6.解密文件

    # gpg --decrypt filename.gpg

     

     

    7.删除密钥

    (1)查看密钥

    # gpg --list-keys

     

     

    (2)删除公钥:

    # gpg --delete-secret-keys 71FBED38

     

     

    (3)查看一次密钥:

    # gpg --list-keys

     

     

    (4)发现要删除的密钥还在,因为你仅仅删除了私钥而已。此时再删除公钥:

    # gpg --delete-key 71FBED38

     

     

    (5)再次查看密钥:

    # gpg --list-keys

     

     

     

    8.签名

    # gpg --clearsign haha.txt

     

     

      以上操作会在当前目录下生成一个名为vps.asc的文件,--clearsign参数表示生成ASCII形式的签名文件,而使用--sign参数生成的文件名为vps.gpg,以二进制形式存储。

    通过--verify参数使用对方的公钥进行签名验证:

    # gpg --sign haha.txt

     

     

    9.验证文件完整性

    # gpg --verify haha.txt.asc

     

     

    若出现上图所示内容,则说明文件传输过程中没有被修改过

     

  • 相关阅读:
    ios端点击document,input框不会失去焦点
    只能输入整数和小数
    Array.prototype.slice.call()方法详解 (调用方法中的参数截取出来)
    jquery自带的显示隐藏功能(有过渡效果)
    jquery鼠标事件
    JavaScript的switch循环
    JS获取当前时间
    jquery添加元素
    逻辑非(!)与(&&)或(||)
    css玩转文字
  • 原文地址:https://www.cnblogs.com/wanghongli/p/8241809.html
Copyright © 2020-2023  润新知