滴水逆向联盟

标题: VC++网络安全编程范例(9)-基于OPENSSL实现对称算法与BASE64编码 [打印本页]

作者: 大灰狼    时间: 2014-7-22 08:55
标题: VC++网络安全编程范例(9)-基于OPENSSL实现对称算法与BASE64编码

对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。


对称算法的加密和解密表示为:


  Ek(M)=C


  Dk(C)=M


  对称算法可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64位――这个长度大到足以防止分析破译,但又小到足以方便作用。


  这种算法具有如下的特性:


  Dk(Ek(M))=M


  常用的采用对称密码术的加密方案有5个组成部分(如图所示)


  l)明文:原始信息。


  2)加密算法:以密钥为参数,对明文进行多种置换和转换的规则和步骤,变换结果为密文。


  3)密钥:加密与解密算法的参数,直接影响对明文进行变换的结果。


  4)密文:对明文进行变换的结果。


  5)解密算法:加密算法的逆变换,以密文为输入、密钥为参数,变换结果为明文。


Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。


请见代码实现案例


[cpp] view plaincopy









欢迎光临 滴水逆向联盟 (http://dtdebug.com/) Powered by Discuz! X3.2