数据加密
最近女友突然问我什么是加密:
我当然毫无求生欲的先偷懒贴一波百度的加密:
数据加密,是一门历史悠久的技术,指通过加密算法和加***将明文转变为密文,而解密则是通过解密算法和解***将密文恢复为明文。它的核心是密码学。
数据加密仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现信息隐蔽,从而起到保护信息的安全的作用。
然后我就被打了,原因:你敷衍我。。。。
简单来说就是通过加密算法将明文(谁拿到内容,都能看懂的),变为密文(别人都看不懂,只有某些人才能看懂的内容)。
加密的方法根据**的不同分为两种体系。
对称加密和非对称加密。
对称加密:就是加密和解密用同一种**。比如我们都了解的阿特巴希加密法,26个英文字母正序和倒叙排列就是对应的关系。
明文是A 对应的 密文就是Z
明文是B 对应的 密文就是Y
在阿特巴希密码中“nlmvb”代表“MONEY”。
制作密文是用阿特巴希加密法制作,读取也就是解密是也用阿特巴希加密法解密。
比如我想对女友说I Love You 。我要先用加密码改造成密文,也就是R OLEV BLF 而而她想看懂也要用相同的加密发。
这就是对称加密。
优点:效率高,加密速度快,可以加密大量的数据,几G到几十G;
缺点:**的传递问题,特别是多个人同时通信。
我用的**怎么远程传递给女友呢?
多人同时通信的问题,如果我在群聊里说了一句密文,只想让女友知道,但是所有知道我加密法的人都能知道我的意思。也就造成的安全隐患。
非对称加密:
加密和解密使用不同的**。
通过公钥和私钥实现的,就是我发布了两个规则,一个规则用来加密叫做公钥,一个规则用来解密叫做私钥。比如一段信息:6666 用公钥加密后是rueidgfsnj,然后用私钥解密后是6666。
公钥就随便传播,反正私钥在我手上只有我能读。
进一步解释就是收文件的一方发送公钥给别人。
优点:解决了**传递的问题
缺点:效率低,加密速度慢,比对称加密速度慢1000倍,只能加密少量数据
对称加密+非对称加密:
将一段信息先进行对称加密,因为速度快,能加密大文件。然后将对称加密的**进行非对称加密,最后传输的是2个文件,1、被加密的数据文件。2、被加密的**文件。
解密时,先用私钥解***文件,获得对称加密的**,然后用这个**解密数据文件。
加密算法:
就是具体的数据加密过程了。
GPG
PGP是比较成熟的加密算法,由于PGP算法太安全(**它需要3亿年),属于美国*严禁传入中国的计算机产品。我们现在能够得以使用GnuPG(它是PGP的开源产品),是要感谢GNU和*软件运动,这也是我们推崇开源运动的原因!!GPG是一个完全免费、源代码公开,并且与PGP完全兼容的软件产品。今天,GPG已经拥有众多的企业和个人用户。作为一个开源并且免费的加密和数字签名软件已经存在多年。它不但可以为企业、个人之间的重要信息提供加密保护,还可以为出版的软件、内核等电子产品进行数字签名,防止产品被篡改,最大程度地保障信息安全。
SSL
SSL:Secure Sockets
Layer 安全套接层,为Netscape(美国网景公司)所研发;
TLS:Transport Layer Security(传输层安全)是SSL的继任者,为网络通信提供安全及数据完整性的一种安全协议。
SSL的功能:
TLS与SSL在传输层对网络连接进行加密,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
HTTPS
具体操作:
secret:172.16.12.95
secret2:172.16.12.96
[aaa@qq.com ~]# useradd username1
[aaa@qq.com ~]# echo 000000 | grep username1 --stdin
[aaa@qq.com ~]# useradd username2
[aaa@qq.com ~]# echo 000000 | passwd username2 --stdin
用这两个用户登录。
【1】GPG
1、对称加密:
[aaa@qq.com ~]$ echo "hi username2" > file.txt
[aaa@qq.com ~]$ gpg -c file.txt
然后弹出这个。
输入密码:英文字母,数字,字符,8位以上。
我的是:abc123_# 只要记住就好了。
[aaa@qq.com ~]$ ls
file.txt file.txt.gpg
然后就很能看到加密后的文件了。
确实无法看懂…
[aaa@qq.com ~]$ scp file.txt.gpg aaa@qq.com.16.12.96:/home/username2
把密文发过去。
secret2解密。
gpg -d file.txt.gpg
gpg: directory `/home/username2/.gnupg' created
gpg: new configuration file `/home/username2/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/username2/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/username2/.gnupg/secring.gpg' created
gpg: keyring `/home/username2/.gnupg/pubring.gpg' created
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
hi username2 >>>>>>>这个就是解密后的内容
gpg: WARNING: message was not integrity protected
需要输入在1上设置的密码。abc123_#。就可以解码了。
[aaa@qq.com ~]$ gpg -d file.txt.gpg > file1
直接存到硬盘上。
2、非对称加密
这个最好直接连虚拟而不是远程,因为会根据鼠标键盘的移动轨迹记录随机数。远程工具没有鼠标,很慢。
[aaa@qq.com ~]$ gpg --gen-key
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1 ##加密算法
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) ##**长度
Requested keysize is 2048 bits
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
GnuPG needs to construct a user ID to identify your key.
Real name: user2-node2 ##唯一标识
Email address: aaa@qq.com.com ##邮箱
Comment: user2's key ##描述,可以不写
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O ##确认
看上边的,动鼠标和键盘记录随机数。
完成状态。
这几个就是生成的文件了。
在家目录的.gnupg/
下。
查看公钥,私钥:
[aaa@qq.com ~]$ gpg --list-key //公钥
/home/username1/.gnupg/pubring.gpg
----------------------------------
pub 2048R/2318820A 2019-12-13
uid username-12.95 (username1's key) <aaa@qq.com.com>
sub 2048R/72FC8115 2019-12-13
[aaa@qq.com ~]$ gpg --list-secret-key //私钥
/home/username1/.gnupg/secring.gpg
----------------------------------
sec 2048R/2318820A 2019-12-13
uid username-12.95 (username1's key) <aaa@qq.com.com>
ssb 2048R/72FC8115 2019-12-13
username1给username2发送文件:
user2导出公钥:
[aaa@qq.com ~]$ gpg --export username2-12.96 //乱数形式 后边的是公钥的real-name,上边说的唯一标识。
[aaa@qq.com ~]$ gpg --export --armor username2-12.96 //二进制形式
乱数形式的
[aaa@qq.com ~]$ gpg --export --armor username2-12.96
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
mQENBF3z3d4BCADKfMNGyidxEChZEuFXErnARnoDeZJluGXkyC/mXSBVzNGnS7mI
e4xQUclVNEdPUYYFDRgW2vE6ggReA1O7giwZX+Fw1ePFYaLtG0mD/zUTzWUP+K5S
/69gX9R87lrLQCB4EilSwF0quLgY9K0MeNkF1655KtEsFxs68jjAGu4VvVRP3xmN
40wNKCXXVwGoW/gUDcVoQPcrCgmfAAkiS46lv5J0X0a8WzB9G+FagPNJvjUGDynC
二进制形式的。
[aaa@qq.com ~]$ gpg --export --armor username2-12.96 > username2.pub
制作公钥文件
用scp发给username1
username1导入2 的公钥
[aaa@qq.com ~]$ gpg --import username2.pub
查看公钥发现有2个
[aaa@qq.com ~]$ gpg --list-key
/home/username1/.gnupg/pubring.gpg
----------------------------------
pub 2048R/2318820A 2019-12-13
uid username-12.95 (username1's key) <aaa@qq.com>
sub 2048R/72FC8115 2019-12-13
pub 2048R/2BB8ED53 2019-12-13
uid username2-12.96 (username2's key) <aaa@qq.com.com>
sub 2048R/1E4DA576 2019-12-13
username1用2 的公钥加密。
[aaa@qq.com ~]$ cp /etc/passwd ./userlist.txt
做一个数据文件。
[aaa@qq.com ~]$ gpg --encrypt --recipient username2-12.96 --armor userlist.txt
加密
此时u2发过来的那个公钥文件基本没啥用了,因为已经导入了公钥。
[aaa@qq.com ~]$ ls
file.txt file.txt.gpg userlist.txt userlist.txt.asc username2.pub
已经能看到userlist.txt.asc这个加密后的文件。
再把这个加密后的文件发给u2
user2解密:
[aaa@qq.com ~]$ gpg --decrypt --armor userlist.txt.asc
输入自己的私钥密码
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
就能看到文件内容了
导入的公钥是不被信任的,需要对公钥进行签名操作:
u1
[aaa@qq.com ~]$ gpg --fingerprint username2-12.96
查看u2的公钥的指纹信息
[aaa@qq.com ~]$ gpg --sign-key username2-12.96
对u2的公钥进行签名操作
输入自己的私钥密码
Really sign? (y/N) y
现在在用公钥进行加密就不回提示是危险的公钥。
【2】openssl
[aaa@qq.com ~]$ openssl
OpenSSL> ?
openssl:Error: '?' is an invalid command.
Standard commands
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
Standard commands
//命令
Message Digest commands (see the `dgst' command for more details
//用于签名的加密算法
Cipher commands (see the `enc' command for more details)
//用于加密的加密算法
1、对称加密:
user1
[aaa@qq.com ~]$ openssl enc -e -bf -in userlist.txt -out userlist.txt.ssl
enter bf-cbc encryption password: //设置对称加密的密码
Verifying - enter bf-cbc encryption password:
enc 加密操作
-e 加密
-bf 加密算法
-in 准备加密的文件
-out 加密后生成的文件
[aaa@qq.com ~]$ scp userlist.txt.ssl aaa@qq.com.16.12.96:/home/username2
发给u2
user2
[aaa@qq.com ~]$ openssl enc -d -bf -in userlist.txt.ssl -out userlist.txt
enter bf-cbc decryption password://输入user1 那边设置的密码
然后生成文件userlist.txt
[aaa@qq.com ~]$ cat userlist.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ok
2、非对称加密
生成公钥和私钥:
私钥可以设置密码,也可以不设置密码。
[aaa@qq.com ~]$ openssl genrsa 1024 > user2.pri
创建私钥,无密码
user2.pri私钥文件
[aaa@qq.com ~]$ openssl genrsa -des3 1024 > user2.pas
Generating RSA private key, 1024 bit long modulus
......................................................++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
创建私钥,有密码
从私钥中提取公钥
[aaa@qq.com ~]$ openssl rsa -in user2.pri -pubout -out user2.pub
writing RSA key
user2.pub这个是公钥文件
[useaaa@qq.com ~]$ openssl rsa -in user2.pas -pubout -out user2.pub1
Enter pass phrase for user2.pas:输入私钥密码
writing RSA key
带密码私钥提取公钥
[aaa@qq.com ~]$ scp user2.pub aaa@qq.com.16.12.95:/home/username1
公钥发给u1
[aaa@qq.com ~]$ openssl rsautl -in userlist.txt -out userlist-txt.sec -pubin -inkey user2.pub -encrypt
RSA operation error
139963374098336:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:153:
可以看到报错,因为文件太大了。
[aaa@qq.com ~]$ ls -lh userlist.txt
-rw-r--r-- 1 username1 username1 1.8K Dec 14 03:01 userlist.txt
这都算大。。。。。。
user1重新加密
[aaa@qq.com ~]$ echo "123456" > key
[aaa@qq.com ~]$ openssl rsautl -in key -out key.sec -pubin -inkey user2.pub -encrypt
[aaa@qq.com ~]$ scp key.sec aaa@qq.com.16.12.96:/home/username2
发给user2
user2 解密
[aaa@qq.com ~]$ openssl rsautl -in key.sec -out key -inkey user2.pri -decrypt
[aaa@qq.com ~]$ cat key
123456
3、对称加密+非对称加密
user1给user2发送大文件,并加密。
首先、用对称加密加密大的数据文件。
其次、用非对称加密法加密对称加密的加密算法和密码,生成**密码文件。
最后、user2 用私钥解***密码文件,获得对称加密的算法和密码,用得到的算法和密码解密数据文件。
user1:
[aaa@qq.com ~]$ openssl enc -e -bf -in userlist.txt -out userlist.txt.ssl
对称加密大文件。并设置密码。
[aaa@qq.com ~]$ echo "-bf,123" > key
制作**文件,里边写了对称加密的算法和密码。
[aaa@qq.com ~]$ openssl rsautl -in key -out key.sec -pubin -inkey user2.pub -encrypt
非对称加密加密这个**文件。、
[aaa@qq.com ~]$ scp key.sec aaa@qq.com.16.12.96:/home/username2
[aaa@qq.com ~]$ scp userlist.txt.ssl aaa@qq.com.16.12.96:/home/username2
两个文件都发给user2
user2解密
[aaa@qq.com ~]$ openssl rsautl -in key.sec -out key -inkey user2.pri -decrypt
解***文件
[aaa@qq.com ~]$ cat key
-bf,123
获得对称加密的算法和密码
[aaa@qq.com ~]$ openssl enc -d -bf -in userlist.txt.ssl -out userlist.txt
enter bf-cbc decryption password:
输入密码 用bf算法
[aaa@qq.com ~]$
[aaa@qq.com ~]$ ls
key.sec user2.pub userlist.txt.asc username2.pub
key user2.pri userlist.txt--->这个就是解密后的大文件,
到此,加密就基本说完了。我女友是懂了,非常开心的打了我,说又知道了对她来说没啥用的东西。
我直接吓醒了,然后长出了一口气,幸好我没有女朋友。
上一篇: Pwnable.kr WP