在对比现有的加密软件和古典密码学常见的加密算法后,我们结合文本加密的现状及发展趋势,将基于动态Huffman编码和S-DES算法相结合,弥补两者的缺点,达到对文本信息的最佳加密及解密效果。

一、Huffman和S-DES混合加密算法与现有及传统加密算法的比较

文本加密技术是保障信息安全最基本、最核心的技术措施,主要通过对数据的加密和数字签名来实现。其中对数据的加密处理主要是为了防止数据不会被窃听。数据的加密方式有两种,一种是传统的对称密钥加密,就是加密方用一把密钥对数据进行加密,而解密方用同样一把密钥对数据进行解密。第二种是非对称密钥加密,如果使用这种算法,可以保证对发送方和接收方身份的确认。而数字签名实际上是由生成摘要和生成数字签名两部分构成。其中摘要可以防止文件被篡改,保证信息的完整性;而数字签名则是为了保障在商务活动中数据的不可否认性,从而使数据具有法律意义。

目前在文档安全管理市场上,加密可分为:文档格式转换加解密、核心层加解密、应用层加解密。常见的加密软件有:1)记事本加密器Ncrypt TX,它预设了多种加密算法,包括DES、3DES、Rijndael、Polyalphabetic、ROT13、Vigenrre、Playfair等。当然不同的加密算法支持不同的数据编码格式,如Hex、Base64、Text、Word等。在工具栏中也可以相应地设置所需的密码。2)超级密码本Super Code有两个特色:第一是多重加密功能;第二是密码自动生成,通过创建密钥文件,摆脱记忆密码的烦恼。Super Code内置了TripleDES、DES、Rijndael、RC2等加密算法。Super Code的特点是允许你以上述加密算法为依据,自由组合,创建自己独有的加密算法序列,例如可以选择两种TripleDES算法,一种DES算法,三种RC2算法,五种Rijndael算法,而且可以灵活排列其先后顺序。

对称密钥密码系统,历史悠久,加/解密速度快是其优点,但因加密密钥与解密密钥为同一把密钥,信息的传送方如何在加密之后,将密钥以安全的方式传送给接收方,如何使双方能共享该密钥,是此密码系统的一大问题,因此,对称密钥密码系统不适合多人使用的应用。

非对称式加密就是加密和解密使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们必须配对使用,否则不能打开加密文件。“公钥”是指可以对外公布的“私钥”则只能由持有人知道。它的优越性在于,对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别人窃听到,而非对称式加密方法有两个密钥,“公钥”可以公开,收件人解密时只要用自己的私钥即可,这样就很好地避免了密钥的传输安全性问题。

非对称式密码系统也称为“公开密钥密码系统”,它弥补了对称密钥密码系统的缺点,但运算速度较慢是公开密钥密码系统的缺点。

DES算法运算速度较慢,但在此基础上改进的S-DES算法,是一个对称分组加密的简化模型,有利于研究和实现,再结合Huffman编码对文本信息进行压缩编码,即Huffman编码和S-DES算法相结合的混和加密算法就应运而生了。

二、Huffman和S-DES加密算法原理分析

1、Huffman编码原理分析

哈夫曼编码是一种变长编码,是哈夫曼树的一个应用。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。

哈夫曼编码根据字符出现的概率来构造平均长度最短的编码。在编码中,若各码字长度严格按照码字所对应符号出现概率的大小的逆序排序,则编码的平均长度是最小的。其中,码字是明文字符,是通过哈夫曼编码后得到的编码,其长度由明文中字符出现的概率决定,出现概率大的编码长度短,出现概率小的编码长度长。哈夫曼编码对需要编码的数据进行两遍扫描:第一遍统计原数据中各字符出现的频率,利用得到的频率值创建哈夫曼树,并把树的信息保存起来,以便解压时创建同样的哈夫曼树进行解压;第二遍则根据第一遍扫描得到的哈夫曼树进行编码,并把编码后得到的码字存储起来。

哈夫曼编码的缺点:一、对于过短的文件进行编码的意义不大,因为存储哈夫曼树的信息就需要较大的存储空间;二、存储编码信息时,编码速度慢,效率低下。

2、S-DES算法分析

S-DES加密算法是以8位明文和10位密钥作为输出。其解密算法用同一密钥对8位密文分组产生原来的明文分组,如图1所示,它描述了S-DES的算法流程。

解密算法的数学表示:明文=IP-I (fkl (SW (fk2 (IP(密文)))))

S-DES加密算法涉及五个函数

1)初始置换IP (initial permutation),IP=<d:\2013年学术和海外\飞翔导入图片目录17\郑静Huffman和S-DES混合加密算法的研究14Yo-FBOO\image2. png>,将8bit数按照IP函数进行移位;

2)复杂函数fkl,它是依赖于子密钥,包含置换和替换的运算;

3)置换函数sw,将8bit数的左4bit和右4bit交换位置;

4)复杂函数fk2,它是依赖于子密钥K2,包含置换和替换的运算;

5)初始置换IP的逆置换IP-I,IP-I=<d:\2013年学术和海外\飞翔导入图片目录17\郑静Huffman和S-DES混合加密算法的研究14Yo-FBOO\image3. png>,将8bit数按照IP-I函数进行移位。

三、Huffman和S-DES算法混合加/解密过程

1、混合加密过程

用数据流方式读入将要加密的文本文件信息,输入密钥并保存,经过一次哈夫曼编码加密后转化为0/1字符串,在进行第二次加密之前要将0/1字符串分组,每8位一组,将其作为第二次加密S-DES算法的明文输入,经过S-DES算法得到最终的密文,将其保存到另一个TXT文本文件中。混合算法的加密过程如图2所示。

2、混合解密过程

解密过程首先要进行身份认证,输入密钥,身份认证成功后将进行解密,否则将不会解密。首先将最终的密文进行分组,每8位一组,经过S-DES算法进行第一次解密,得到O/1字符串,将其作为Huffman算法的编码进行第二次解密,即可得到最终的明文。其混合算法的解密过程如图3所示。

四、Huffman和S-DES混合算法的实现

1、Huffman编码的实现

Huffman算法主要涉及到5个核心函数,分别为获取权值数组GetWeightArray,构建哈夫曼树Creat eHuffmanTree、创建哈夫曼编码字典CreateHuffmanDict、哈夫曼编码StringToHuffmanCode以及哈夫曼编码的解码ToHuffmanCode。

1)获取权值数组GetWeightArray(string str)

将文本信息中的每种字符出现的次数进行统计,并将其作为哈夫曼树的权值。

2)构建哈夫曼树CreateHuffmanTree (Node[] sources)

按“左走0,右走1”的原则创建哈夫曼树。

3)创建哈夫曼编码字典CreateHuffmanDict (Node hTree)

创建哈夫曼编码字典,在数组中实现“左走0,右走1”。

4)哈夫曼编码StringToHuffmanCode (out Dictionary<char, string> key, stringstr)

由创建的哈夫曼树,得到哈夫曼编码。

5)哈夫曼编码的解码ToHuffmanCode(string source, Dictionary<char, string>hfdict)

将哈夫曼编码还原成哈且血L 0每个字符出现的次数,将其还原成原文本信息。

2、S-DES算法的实现

S-DES算法中涉及的核心算法为P10置换;P8置换;IP函数;FK函数;sw函数;IP-I函数。

1) P10置换 pl0(( string miyao)

numbers = miyao. ToCharArray ();

miyao = “.. ;

miyao = miyao + numbers[2] + numbers [4] + numbers[l] + numbers [6] ++ numbers [9] + numbers[0] + numbers [8] + numbers [7] + numbers [5];

2) P8置换p8 (string lsl, string ls2)

miyao = miyao + numbersl[2] + numbersl[3] + numbersl[4] + ls2

miyao = miyao + numbers[3] + numbers[0] + numbers [4] + numbers[l] +numbers [3]numbers [5]+ numbers [2] + numbers[7] + numbers [6] ;

3) IP函数 IP (string mingwen)

mingwen = mingwen + numbers [1] + numbers [5] + numbers [2] + numbers [0] + numbers [3]+ numbers [7] + numbers [4] + numbers [6] ;

4) FK函数 fk (string mingwen, tringkey)

int[, ]s0=new int[, ]({1, 0, 3, 2), {3, 2, 1, 0), {0, 2, 1, 3), {3, 1, 3, 2) };

int[, ]s1=new int[, ]({0, 1, 2, 3), {2, 0, 1, 3), {3, O, 1,O), {2, 1, 0, 3)};

varstr = Convert. ToString(Convert. ToInt32(lstr, 2) - Convert. ToInt32(varstr,2), 2) + rstr;

while (varstr. Length < 8) varstr = '0' + varstr;

5) SW函数 sw (string mingwen)

mingwen = mingwen + numbers [4] + numbers [5] + numbers [6] + numbers [7] + numbers [0]+ numbers [1] + numbers [2] + numbers [3] ;

6) IP-I函数NIP (string mingwen)

mingwen = mingwen + numbers [3] + numbers [0] + numbers [2] + numbers [4] + numbers [6]+ numbers [1] + numbers [7] + numbers [5] ;

小知识之Huffman

哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。