暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GPG加密和签名

二进制之城 2021-11-21
1259

GPG是用于对数据和通信进行加密和签名的工具,不过和PGP不同,它是免费的。


一、安装GPG

下载并安装GPG(https://www.gnupg.org/download/index.html),在命令提示符运行以下命令查看版本,返回版本信息则说明安装成功。

    gpg --version


    二、生成密钥对

    在使用GPG加密和签名之前,先执行以下命令生成密钥对。

      gpg --full-generate-key

      接着就是一些选项:

        C:\Users\ROG>gpg --full-generate-key
        gpg (GnuPG) 2.3.3; Copyright (C) 2021 g10 Code GmbH
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.


        Please select what kind of key you want:
        (1) RSA and RSA
        (2) DSA and Elgamal
        (3) DSA (sign only)
        (4) RSA (sign only)
        (9) ECC (sign and encrypt) *default*
        (10) ECC (sign only)
        (14) Existing key from card
        Your selection? 9
        Please select which elliptic curve you want:
        (1) Curve 25519 *default*
        (4) NIST P-384
        (6) Brainpool P-256
        Your selection? 1
        Please specify how long the key should be valid.
        0 = key does not expire
        <n> = key expires in n days
        <n>w = key expires in n weeks
        <n>m = key expires in n months
        <n>y = key expires in n years
        Key is valid for? (0) 0
        Key does not expire at all
        Is this correct? (y/N) y

        还有输入Real nameEmail addressComment和口令。


        三、生成撤销证书

        撤销证书只能在密钥可用时生成,所以生成密钥对后,应该为其生成一份撤销证书,以备在某些情况下撤销密钥。

          gpg --generate-revocation "YourName"


          四、加密和解密文件

          使用公钥加密data.zip文件,并将其输出为data.zip.gpg保存。其中--recipient参数用于指定接收者的USER-ID,不过输入USER-ID有点儿麻烦,使用生成密钥对时输入的Real name简单多了。

            gpg --recipient "YourName" --output "data.zip.gpg" --encrypt "data.zip"

            解密文件:

              gpg --output "data.zip--decrypt "data.zip.gpg"


              五、签名和验证文件

              明文签名:
              明文签名在平时可能会很少用到,但的确有这样的时候,我们需要让他人知道某个消息就是我们发的。此时,可以将要发送的内容放到
              message.txt文件中,再执行以下命令为message.txt签名(由于签名用的是私钥,需要输入口令),签名后会生成message.asc签名文件,此文件包含了发送内容与签名,将文件或复制文件中的内容发送给收件人,对方收到后就可以进行验证了。

                gpg --local-user "YourName" --clear-sign "message.txt"

                作为收件人则要导入发件人的公钥,执行以下命令验证签名,如果收到的不是文件,则先将其保存为文本文件后再进行验证。

                  gpg --verify "message.asc"

                  独立签名:
                  要对Zip这类二进制文件签名时,不能将签名附加到文件中,而需要使用--detach-sign参数生成独立的签名文件。

                    gpg --local-user "YourName" --output "data.zip.sig" --detach-sign "data.zip"

                    这种签名方式在验证时,请将data.zipdata.zip.sig文件放在同一位置并执行以下命令:

                      gpg --verify "data.zip.sig"


                      六、同时进行加密和签名

                      如果既加密又要签名,可以使用以下命令:

                        gpg --local-user "YourName" --recipient "YourName" --output "data.zip.gpg" --sign --encrypt "data.zip"

                        在解密文件时,GPG会自动验证签名。

                          gpg --output "data.zip" --decrypt "data.zip.gpg"


                          七、导出密钥

                          导出公钥:

                            gpg --output "pubring.gpg" --export "YourName"

                            导出私钥:

                              gpg --output "secring.gpg" --export-secret-keys "YourName"

                              C:\Users\ROG\AppData\Roaming\gnupg\trustdb.gpg和导出的pubring.gpgsecring.gpg进行保存。


                              八、导入密钥

                              导入公钥:

                                gpg --import "pubring.gpg"

                                导入私钥:

                                  gpg --import "secring.gpg"

                                  然后复制trustdb.gpg到对应的位置。

                                  文章转载自二进制之城,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论