GPG加密和MySQL备份

Posted on 日 05 2月 2017 in linux

GPG:

GPG是GNU Privacy Guard的简称,也称为GnuPG,(在ubuntu 和mac os中,配置文件的目录就叫做.gnupg),它是PGP项目的开源版本。它主要用于加密、数字签名、产生非对称密钥。 GPG加密的原理可以理解为发出讯息者以接收讯息者的公钥将讯息加密,接收者则以自己的私钥解密。发送方和接收方都用GPG产生自己的一对密钥,一个是私人密钥,一个是公开密钥。然后双方互相发送公钥给对方。发送方把信息用对方的公钥加密,接收方收到消息后用对应的私钥解决就可以得到消息原始内容。 下面是一些ubuntu下创建密钥及加密解决的过程

  • 生成密钥
gpg --gen-key

回车过后会有一些提示,填写相关信息。最后会输入一个密码,这个密码是在解密文件的时候会输入,一定要牢记
然后他会提示做一些锁事,产生更多的熵。如果产生的熵不够的话,可以按下面来做

sudo apt-get install rng-tools
sudo rngd -r /dev/urandom
  • 查看密钥
# gpg -K, gpg --list-publick-keys gpg --list-secret-keys
gpg --list-keys

pub   2048R/BA87EA7D 2017-02-16
uid                  gpg_test <gpt_test@test.com>
sub   2048R/4FF87A98 2017-02-16

BA87EA7D是这个公钥的Hash值,在加密的时候需要用到

  • 输出公钥
    公钥文件(.gnupg/pubring.gpg)以二进制形式储存,armor参数可以将其转换为ASCII码显示。
gpg --armor --output public-key.txt --export [用户ID] # 就是上面提到的字符串

然后生成的public-key.txt就可以发送给别人

  • 导入密钥 这一步与上一步相关,要给别人发消息,应该导入别人的公钥
gpg --import 密钥文件
  • 加密文件
gpg --recipient [用户ID] --output demo.en.txt --encrypt demo.txt

用户ID是上面提到的接收者公钥的Hash值

  • 解密文件 解密别人发给自己的文件
gpg demo.en.txt 

需要输入自己私钥的密码,也就是在生成密钥对时输入的密码。

  • MySQL备份可以用mysqldump命令
mysql -u root -pXXXXX db_name

备份数据库然后再用GPG加密

mysql -u root -pXXXXX db_name | gpg --recipient [用户ID] --output backup.sql --batch --yes --encrypt -

参考链接:

https://zh.wikipedia.org/wiki/GnuPG
https://zh.wikipedia.org/wiki/公开密钥加密
http://www.ruanyifeng.com/blog/2013/07/gpg.html