欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

使用gnupg为文件传送文件加密

程序员文章站 2022-03-29 15:53:08
Windows系统请安装Gpg4win,mac os 安装GPGTools   安装好后创建一个新的公私钥匙对(key pair)   gpg --gen-key...
Windows系统请安装Gpg4win,mac os 安装GPGTools

 

安装好后创建一个新的公私钥匙对(key pair)

 

gpg --gen-key

    按提示一步步做到最后,注意*千万*不要忘记或泄漏我们的私匙(passphrase)!

    我们假定最后的用户信息为:

 

        You selected this USER-ID:

            "sb(sbsb.) <sb@sb.com>"

创建一个撤销证书(revocation certification)并做好备份

 

    $ gpg --output sb_gpg_revoke.asc --armor --gen-revoke sb@sb.com

 

    将这份证书(sb_gpg_revoke.asc)保存/备份到安全的位置。

 

    注意在任何时刻我们都可以使用

       $ gpg --list-key

    查看当前可用的key

 

导出公匙

    $ gpg --output sb_gpg_asc.gpg --armor --export sb@sb.com

 

    注意这个公匙文件(somebody_gpg_asc.gpg)是需要和别人交换发给别人使用的。我们也可以将此证书发送到某些知名的服务器。

    请参见相关文档

 

现在我们假定需要将文件testfile.txt发送到用户 anotherone@elsewhere.com

    这里简单的介绍一下PGP的建立过程。

 

    a) 用户A获取用户B的公匙文件,并导入改公匙

    b) 用户A签名用户B的公匙文件。

    c) 用户A通过用户B的公匙加密文件F,并将加密过后的文件F.asc发送给用户B

    d) 用户c获取到文件F.asc,并通过自己的私匙解密文件F.asc并还原为文件F

 

 

    公匙虽然是公开的,但目前理论上绝对是安全的。其基本原理为任意一个合数都可以分解为多个质数的乘积。比如

        8 = 2*2*2

       14 = 2*7

    但一个数很小的时候我们能很快发现这些互质的数(eg: 39 = 13 * 3),但当这个数很大的时候却很难找到这些互质的数了,如:

       995757614766768701903 = 13757413 * 72379713741731

    已经基本不可能退出这两个互质的数(不一定是真正的质数,这里仅为做一个简单的演示)了。实际我们采用的数字通常为1024-bit

    这样产生的结果即使在目前最快的计算机上计算,至少也需要几千年的时间才可能得出最终的结果。

 

导入sb@sb.com的公匙。

 

    $ gpg --import anotherone_gpg_asc.gpg

    可以通过

    $ gpg --list-key

    验证是否导入成功

 

签名该公匙文件

    $ gpg --edit-key sb@sb.com

 

    $ # fpr 

    $ sign

       # 按要求输入相关签名信息。

    $ # check

    $ write

    

通过用户sb@sb.com的公匙加密需要传送的文件testfile.txt

    $ gpg --armor --encrypt testfile.txt

    得到文件testfile.txt.asc,将此文件发送到需要接收方。

 

用户收到文件testfile.txt.asc后,利用自己的私匙解密该文件

    $ gpg --decrypt testfile.txt.asc

    得到文件testfile.txt

 

注:测试通过的情况多出了两步,即用户anotherone@elsewhere.com也导入了sb@sb.com的公匙并做了数字签名。