一、为什么要加密
在网络这个大森林里面,所有的数据传输都是不安全的,在数据传输中必须要给数据加密,以防止被别人劫持盗取
二、数据在网络中怎么传输
数据从发送出去到目的地都经过了哪些步骤?
1、ISO国际标准组织定义了数据在网络传输中的七层模型:数据从 应用层--会话层--表达层--传输层--网络层--数据链路层--物理层 逐层封装传输,数据到达最底层后传送出去,到达目标主机后在从底层往上层传输并逐层解压封装。
2、在TCP/IP定义的四层模型里,数据传输也是一样的道理,应用层--传输层--网络层--物理层。但是这里面并没有定义数据安全方面的内容,在网络的发展过程里,就产生了给数据加密解密的SSL层(ssl并不是真的一个层,只是在应用层与传输层之间给数据规定加载协议的一个标准)。
我们通过在传输层和应用层之间添加一个SSL层的方式给数据加密。数据由应用层产生和封装,在经过TCP,UDP协议传输之前,用SSL协议对数据流进行二次加工,加密或者解密。
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
SSL能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
三、加密解密的分类及对应的算法
1、对称加密:使用同一种算法同一个密码对数据进行加密解密;
算法:DES、3DES、AES、Blowfish、Towfish、IDEA、RC6、CAST5
2、非对称加密之公钥加密:公钥从私钥中提取而来,使用私钥加密的文件,只能使用公钥解密,反 之亦然;
算法:RSA、 DSA、 ELGamal、 DH
3、非对称加密之单向加密:只能加密,不能解密,用于提取数据的特征码。
算法:md5、 sha系列256、384、512、128
四、一次加密通信过程
发送者:
1.使用单向加密算法提取数据特征码
2.使用自己的私钥加密特征码附加在数据后面
3.生成用于对称加密的临时密钥
4.用此临时密钥加密数据和已经使用私钥加密后的特征码
5.使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后放
接受者:
1.使用自己的私钥解密加密的临时密钥,从而获取对称密钥
2.使用对称密钥解密对称加密的数据和私钥加密的特征码密文,从而获得数据和特征码密文
3.使用对方发送的公钥解密特征码密文,从而获得数据特征码
4.使用与对方同样的党项加密算法计算出数据特征码,并与解密而来的特征码进行比较
五、OpenSSL
在linux上OpenSSL是基于密码学的安装包
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
1.组成部分:
(1)libcrypto:加密、解密库文件;
(2)libssl: ssl协议实现
(3)openssl:多用途命令行工具,每种功能都使用专用的子命令来实现
2.openssl命令使用格式
openssl command [options] [csr_file] [options] [crt_file] [options] #
openssl+子命令+选项+参数
3.子命令,输入openssl 回车 回车查看子命令
4.子命令用法,使用 man查看
六、使用openssl加密解密文件
1、对称加密使用openssl enc
(1)加密文件
openssl enc -e CIPHER -a -salt -in /PATH/FROM/FILE -out /PATH/TO/FILE
(2)解密文件
openssl enc -d CIPHER -a -salt -in /PATH/FROM/FILE -out /PATH/TO/FILE
2、单向加密
(1)提取文件特征码
openssl dgst -CIPHER /PATH/TO/FILE
(2)生成用户密码并且手动指定随机数
openssl passwd -1 -salt N随机数
(3)生成随机数
openssl rand -hex|-base64 NUM
(4)生成用户密码并且自动生成随机数
openssl passwd -1 -salt $(openssl rand -hex|-base64 NUM)
3、公钥加密
(1)生成私钥
openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS
#(umask 077;openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)给私钥文件加权限
(2)提取公钥
openssl rsa -in /PATH/FROM/PRIVATE_KEY_FILE pubout
总结:这些只是使用openssl进行加密解密的基础,学linux必须要对其进行了解和掌握
openssl enc -e|-d -des3 -a -salt -in .. -out ..(-a表示生成base64格式,-salt加入随机码)
openssl dgst -md5|-sha ..(对文件提取特征码)
openssl passwd -1 -salt ..(生成用户密码-1表示使用md5算法)
openssl rand -hex|-base64 ..(从熵池中提取随机码)
openssl genrsa -out .. num_bits(按多少字节生成私钥文件)
openssl rsa -in .. -pubout -out .. (从私钥文件中提取公钥并输出到新文件里)