信息论与编码第9信息论与编码技术的实现与应用.ppt
《信息论与编码第9信息论与编码技术的实现与应用.ppt》由会员分享,可在线阅读,更多相关《信息论与编码第9信息论与编码技术的实现与应用.ppt(31页珍藏版)》请在三一办公上搜索。
1、第9章 信息论与编码技术的实现与应用,学习理论知识,只是为应用提供一定的基础,实际上理论知识与应用知识并不能完全代替。此外,有时候理论知识与应用知识是独立的,比如一些算法,我们甚至于可以在不知道其原理的时候,就调用相关的函数、类库等,只是需要知道这些函数如何调用,有哪些参数、接口就行了。对于一些算法的软件实现(如果实现不是为了学习算法的目的,而是要真正使用该软件),我们建议无需自己按照算法一步一步去写代码,而是直接调用比较出名的函数、类库,它们不仅对一些现实问题提供了很好的解决方案,而且代码上也比较优化,也避免了一些错误。一个好的程序员,应该学会读代码,而且要多读代码,善于引用别人的代码,大型
2、系统中代码量很大,许多复杂的实现不可能自己一一去写代码,借鉴、整理、组合他人代码是最好的方法。在实现与应用中,书本上的知识未必特别有用,而且许多教材上对于应用中必然遇到的问题都缺乏必要的说明,这是有违于一般本科生的就业背景的。本章提供了一些应用相关的知识或给予指引。,9.1 密码算法编程实现指引,密码算法相关实现需要善于寻找方法,一般的情况下,我们并没有必要将所有的算法自己用代码实现。首先,我们应该考虑的是,系统是否附带了相应的功能,比如EFS加密系统在一般的系统中都是附带的,我们只需要用即可。安全套接字(SSL)在浏览器中一般都有集成,我们只需要在目录安全性中做相应的配置即可,虚拟专用网(V
3、PN)在许多操作系统中也是集成的,其服务端和客户端都只需要进行相应的配置。如果没有这样的条件,则我们可以考虑自己编程实现。但是在编程实现过程中,依然要充分利用前人成果:第一、利用前人建立的加密算法代码库,许多代码是开源免费的或非商业应用免费,不存在版权等方面的风险,如GNU Crypto、Cryptlib等;第二、调用相关的API和函数,比如,加密可以用cryptapi;第三,利用一些类库,如.Net的,java的security类;第四,有些诸如OpenSSL之类的软件包也提供相应的函数,可以调用相关的加密函数;第五,参考一些公开的源代码,比如PGP的代码就是公开的。,9.2 压缩编程实现指
4、引,对于无损的数据压缩,一些类库可以调用。网络上也有一些已经写好的代码可供参考、引用,特别是一些开源代码中的压缩实现。从.NET2.0开始,微软提供了一个的NameSpace,下含有GZipStream和DeflateStream,都具有压缩和解压功能,但是不支持zip和rar等常用的压缩文件。对于rar格式,我们可以直接利用WinRAR提供的rar.exe/unrar.exe(此文件在winrar的安装目录下,是一个console程序)。其调用的方法可以参考帮助文件。其常规的命令行语法描述如下:WinRAR-相关的命令和开关请参考RAR的帮助文档中的命令行模式下的内容。对于zip格式,C#类
5、库包含两个类ZipClass和UnZipClass,可以实现zip的压缩解压,也可以使用开源免费的SharpZipLib。Java下也有相关的压缩类,比如,ZIP压缩、JAR压缩、GZIP压缩。有损压缩有时候有针对性,而且有时候涉及到格式的改变,比较复杂,纠错编码一般在应用中无需额外补充,所以它们的相关资源要少许多,不过有一些具有针对性的转换文件格式的有损压缩工具。,9.3 字符编码,信息论的编码主要考虑压缩和可靠性问题,但是现实的字符编码则需要考虑一些现实的制约因素。在应用软件或者是编程的时候,经常会遇到各种字符编码,下面我们介绍字符的各种编码。在数据加密的时候,也会需要将基于任意二进制的字
6、节流转换为字符流,这就涉及到字符编码的选择。,9.3.1 ASCII码,ASCII码全称为美国信息交换标准代码(American Standard Code for Information Interchange,ASCII),这是计算机上最早使用的通用的编码方案。由于那时候没有考虑到使用很多的语言符号,所以涉及到的字符很少。这种编码占用7个Bit,实际在计算机中考虑计算机存储的最小单位是字节,所以占用8bit,最高位没用,通讯的时候有时用作奇偶校验位。因此ASCII编码的取值范围实际上是:0 x00-0 x7f,只能表示128个字符。后来发现128个不太够用,做了扩展,叫做ASCII扩展编码
7、,用足八位,取值范围变成:0 x00-0 xff,能表示256个字符。其实这种扩展意义不大,因为256个字符表示一些非拉丁文字远远不够,但是表示拉丁文字,又用不完。所以扩展的意义还是为了下面的ANSI编码服务。,9.3.2 ANSI编码,ANSI码译为美国国家标准学会(American National Standards Institute)的标准码。ANSI字符集定义为ASCII字符集,以及由此派生并兼容的字符集,如:GB2312等。每个国家(非拉丁语系国家)自己制定自己的文字的编码规则,并得到了ANSI认可,符合ANSI的标准,全世界在表示对应国家文字的时候都通称这种编码就叫ANSI编码
8、。换句话说,中国的ANSI编码和在日本的ANSI的意思是不一样的,因为都代表自己国家的文字编码标准。比如中国的ANSI对应就是GB2312标准,日本就是JIT标准,香港,台湾对应的是BIG5标准等等。当然这个问题也比较复杂,微软从95开始,用就是自己搞的一个标准GBK。GB2312里面只有6763个汉字,682个符号,所以确实有时候不是很够用。GBK一直能和GB2312相互混淆并且相安无事的一个重要原因是GBK全面兼容GB2312,所以没有出现任何冲突,用GB2312编码的文件通过GBK去解释一定能获得相同的显示效果。ANSI编码中,为使计算机支持更多语言,通常使用 0 x800 xFF 范围
9、的2个字节来表示1个字符。比如:汉字中在中文操作系统中,使用0 xD6,0 xD0这两个字节存储。对于ANSI编码而言,0 x000 x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode(UTF-16)编码之间最大也最明显的区别。比如“A君是第131号”,在ANSI编码中,占用12个字节,而在Unicode(UTF-16)编码中,占用16个字节。因为A和1、3、1这4个字符,在ANSI编码中只各占1个字节,而在Unicode(UTF-16)编码中,是需要各占2个字节的。在ANSI的标准中,保留了ASCII的编码,其他的可以任由不同国家对自己的文字进行编码,而且可以
10、采用多个字节。,9.3.3 MBCS,MBCS称为多字节字符系统(multi-byte character set或Multi-Byte Character System),是编码的一种类型,一个MBCS编码包含一些一个字节长的字符,而另一些字符大于一个字节的长度,也就说1、2字节(或更多)混合使用。同时能表示西文字符和中文字符(当然也可以表示别的国家字符,根据codepage码而定),这个是为了兼容不同国家的文字编码方案。为了区别不同长度的字符,将这些字符的最高位置为1。在基于GBK的windows中,不会超过2个字节,所以windows这种表示形式有叫做DBCS(Double-Byte C
11、hactacter System),其实算是MBCS的一个特例。C语言默认存放字符串就是用的MBCS格式。从原理上来说,这样是非常经济的一种方式。,9.3.4 CodePage,CodePage译为代码页,最早来自IBM,后来被微软、oracle、SAP等广泛采用。因为ANSI编码每个国家都不统一,不兼容,可能导致冲突,所以一个系统在处理文字的时候,必须要告诉计算机你的ANSI是哪个国家和地区的标准,这种国家和标准的代号(其实就是字符编码格式的代号),微软称为Codepage代码页,其实这个代码页和字符集编码的意思是一样的。告诉你代码页,本质就是告诉了你编码格式。但是不同厂家的代码页可能是完全
12、不同,哪怕是同样的编码,比如,UTF-8字符编码在IBM对应的代码页是1208,在微软对应的是65001,在德国的SAP公司对应的是4110。所以存在不兼容、不统一的问题。,9.3.5 Unicode编码,Unicode(统一码、万国码、单一码,Universal Code)是一种在计算机上使用的字符编码。它是为了解决前面的一些编码的兼容性问题而推出的。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。Unicode的相关标准可以从
13、unicode.org上面获得,目前已经进行到了6.0版本。Unicode其实只是一张巨大的编码表。要在计算机里面实现,也出现了几种不同的方案。也就是说如何表示unicode编码的问题,包括UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式。UTF-8(UCS Transformation Format 8bit)以8位为单位来标识文字,注意并不是说一个文字用8位标识,而是用8位的倍数来标识。它其实是一种可变字节的MBCS方案,到底需要几个字节表示一个符号,要根据这个符号的unicode编码来决定
14、,最多4个字节。UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0 x00-0 x7F之间的字符,UTF-8编码与ASCII编码完全相同。类似地,UTF-16以16位无符号整数为单位。现在机器上的unicode编码一般指的就是UTF-16。UTF-32则都采用固定四个字节。但是冗余度太大了。现在绝大部分机器实现unicode还是采用的utf-16的方案。当然也有UTF-8的方案。比如windows用的就是UTF16方案,不少linux用的就是utf8方案。,9.4 Base64编码,我们经常会在打开一些文件的时候,看到乱码、空格。这是因为这些字符有些以偏僻字符的形式显示,有些甚至于没
15、有对应的显示形式,这些空格未必对应于空信息,也未必对应于相同的二进制数据。为了让数据以可见、可以打印的方式显示,就需要采用一定的编码转换。BASE64编码是一种常用的将二进制数据转换为可打印、可以在显示器中识别的字符的编码,其原理为将数据对应于ASCII码中可以打印的64个字符。与HEX显示相比,它占用的空间较小。BASE64编码在RFC3548(参见扩展阅读)中定义。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HT
16、TP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。,9.5常用密码系统,9.5.1 PGPPGP(Pretty Good Privacy)是一款非常完善的加密和签名系统,可以让电子邮件、磁盘、文件夹或文件具有保密和认证功能的程序,它提供了强大的保护功能,可以将文档加密后再传送给他人,加密后的信息看起来是一堆无意义的乱码,除了拥有解密密钥的人看得到以外,没有人可以解读。PGP是20世纪80年代中期Hil Zimmermann提出的方案,其创造性在于把RSA公钥体系的方便和传统加密体系的高速结合起来,公开密钥采用RS
17、A加密算法,实施对密钥的管理;分组密钥采用了IDEA(International Data Encyption Algorithm,国际数据加密算法),实施对信息的加密,并且在数字签名和密钥认证管理机制上有巧妙的设计。因此PGP几乎成为最流行的公钥加密软件包。PGP应用程序的一个特点是它的速度快,效率高;另一个显著特点就是其可移植性出色,它可以在多种操作平台上运行。PGP主要具有加密文件、发送和接收加密的e-mail、数字签名等。它采用了以下技术:审慎的密钥管理、一种RSA传统加密的杂合算法、用于数字签名的邮件文摘算法和加密的杂合算法、用于数字签名的邮件往往在加密前压缩等,还有一个良好的人机会
18、话设计。它功能强大,速度快,而且其源代码是免费的。在可以下载到最新的版本和相关信息。PGP的主要功能有:(1)使用PGP对邮件加密、签名,以防止非法阅读、伪冒,或者篡改。(2)能够对文件进行数字签名。(3)能够安全清理磁盘上的信息,防止通过数据恢复软件恢复。(4)能够加密文件。(5)能够设置虚拟的加密盘,将文件都存储到一个加密的文件中,并且可以加载为一个虚拟磁盘。(6)其他非常周到的安全考虑和便捷功能。,9.5.2 加密文件系统EFS,EFS(Encrypting File System,加密文件系统)是Windows 2000及以上Windows版本中附带的加密NTFS文件加密系统。它采用透
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 编码 技术 实现 应用

链接地址:https://www.31ppt.com/p-5230774.html