linux下加密解密之OpenSSL

一、为什么要加密

    在网络这个大森林里面,所有的数据传输都是不安全的,在数据传输中必须要给数据加密,以防止被别人劫持盗取


二、数据在网络中怎么传输

    数据从发送出去到目的地都经过了哪些步骤?

    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 .. (从私钥文件中提取公钥并输出到新文件里)













郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。