对称加密、公钥加密、单向加密

目前数据加密的方式有对称加密、公钥加密、单向加密这三种,不管哪种加密它们的作用都是依赖某种算法(算法都是公开的这点要知道)将明文的数据转变成密文的形式。下面我就大概的介绍下这三种加密方式:
1) 对称加密
对称加密就是发送方和接收方使用的是同一密钥
常用于此机制的算法有DES、3DES、AES、Blowfish
它的优点是:加密和解密的速度快,很适合对大段数据加密
缺点是:这种机制无法解决密钥交换的问题及若一方和多方通信会需要存储多个密码
加密过程:A和B通信,双方会先协商共用哪一密钥,之后A用某一算法和协商好的密钥去加密数据发给B;B收到数据后也用同一算法和协商的密钥便可将数据还原成明文。在这个过程中最大的难题就是如何将密码安全的告知另一方即密钥交换的问题
实现此加密的命令:

#openssl enc –des3 -salt –a -in 要加密的文件 –out 加密后输出的文件

用于解密的命令:

#openssl enc –d  -des3 –in 要解密的文件 –out j解密后输出的文件

2)公钥加密
   公钥加密就是密码的生成是成对的,即公钥加密的数据只能用与之匹对的私钥才能解密;而私钥加密的数据也只能用与之匹对的公钥才能解密。而且要清楚的是公钥是可以公开的但私钥是不成公开的只有生成密钥对的人才有否则安全性荡然无存
常用于此机制的算法有:RSA、DSA、ELGAMAL
它的优点是:可用于密钥的交换和数字签名
缺点:不适合加密数据因速度太慢;此机制无法解决的难题是无法确定得到的公钥就是对方的
实现密钥交换同时又可加密的过程:
A先生成一个对称密钥然后用此密钥加密要发给B的数据,在再已加过密的数据的后面附上用B的公钥加密的密钥然后发给B;B收到数据后先用自己的私钥解密出密钥再用密钥将数据还原成明文;之后B也采用此方式与A通信。这样就很好的避免了密码交换的问题但是又出现的问题是无法保证得到的公钥就是要通信方的公钥
用对方的公钥加密对称密钥这样只有对方的私钥可以解密这样就很好的实现了密码交换
而用自己的私钥加密某数据的特征码便很好的实现了数字签名
实现此机制的命令:
#openssl genrsa 密码长度如768、1024、2048
生成的私钥输出至屏幕若想输出到指定的文件(如:filename)就用重定向如:
#openssl genrsa 768 > filename
对生成的私钥文件提取出公钥并输出至屏幕可如下做:
#openssl rsa –in filename -putout
对生成的私钥文件同时修改权限为600的可如下做:
#(umask 077;openss genrsa 1024 > filename)
对生成的私钥文件再加密可如下做:
#openssl rsa –des3 –in filename –out 再对私钥文件加密后输出的文件名
在生成私钥文件的同时对它加密可如下做:
#openssl genrsa –des3 –out 再对私钥文件加密后输出的文件 1024
对加过密的私钥文件解密:
#openssl rsa –in 加过密的文件 –out 输出解密的文件
2) 单向加密
它的特点:不管加密的数据多长都会定长输出;不可逆转即无法将得到的数据在逆着解密;雪崩效应即数据微小的变化就会导致结果的巨大变化
常用在此机制上的算法有:MD5、 SHA1 、CRC-32
实现身份验证和数据完整性但无法保证数据安全的过程:
A先用单向加密数据将得到的数据再用自己的私钥加密附在数据之后发给B;B收到数据后若能用A的公钥解密出加过密的特征码则说明这就是A发来的数据,若用单向加密数据能得到和A发来的一模一样的特征码说明此数据没被别人篡改过这样就保证了数据的完整性
实现身份验证,数据完整性和数据加密的过程:
A用单向加密要发给B的数据得到特征码,再用自己的私钥加密此特征码,将加过密的特征码附加在数据之后A会用自己生成的对称密钥加密这两段数据再用A的公钥加密生成的密钥再次附件在加过密的两段数据之后发给B;B收到数据后用自己的私钥解密出密码然后用此密码解密出数据,若B能用A的公钥解出附加在数据之后的特征码就说明这就是A发来的数据,若B用单向加密得到的数据特征码和A发来的一模一样则说明此数据未被篡改过如此一来身份验证,数据完整性和数据加密便都可实现了但此过程也会遇到无法保证得到的公钥就是要通信的一方的公钥
实现单向加密的命令:
计算文件(如:filename)的校验码(特征码)
#md5sum filename
#shalsum filename
#openssl dgst –md5 filename
#openssl dgst –sha1 filename