[转]文件加密和数字签名技术概述

摘自:http://blog.163.com/chyr2007@126/blog/static/50965734201041051058644/

------------------------------

说到文件加密或许有人马上联想起Word或Excel等文档文件的密码保护措施,然而我们本章所介绍的“文件加密”绝不是这种密码保护,而是一种新型的数字化加密技术,所利用的是加密密钥。Word或Excel的密码保护仅是保证文件在没有密码时不能打开或修改,这个保护级别相对来说较低,一般这种保护密码很容易通过一些专用程序解密。而现在要讲的文件加密和数字签名,加密后的文件在解密之前会面目全非,没有对应的密码是无法进行阅读的,更别谈修改了。这种密码比起前者所使用的密码长许多倍,而且是配对使用的,据专家分析用程序解密的可能性几乎为零,即使能解密,也起码要10000年。

    数字签名就是基于加密技术之上的,其实本身也是一种加密技术。它的作用就是用来确定发送文件或发送邮件的人是否是真实的。
 
8.1         文件加密和数字签名的由来和意义
 
    加密作为保障数据安全的一种方式,不是现在才有的,它产生的历史相当久远,它的起源要追溯到公元前2000年(几十个世纪了),虽然当时并小是现在我们所讲的加密技术(甚至不叫加密1,但作为一种加密的概念,确实早在几十个世纪前就诞生了。当时埃及人是最先使用特别的象形文字作为信息编码的,随着时间推移,巴比伦、美索不达米弧和希腊文明都开始使用一些方法来保护他们的书面信息。
    加密作为保障数据安全的一种方式,早就在历史上发挥了重要的作用,从远古时代开始,人们就已经在采用一种如今称为“编码”(Code)的方法用于保护文字信息。最早影响世界的加密技术诞生于战争年代,由德国人发明,用于传递攻击信息;而最早影响世界的解密技术,也诞生于战争年代,由英美开发出来破译德国人的攻击信息。正是战争让加解密技术不断改进发展,直到现在,仍然在为信息时代的数据安全而服务。
    以前,加密技术主要应用于军事领域,如美国独立战争、美国内战和两次世界大战。最广为人知的编码机器是German Enigma机,在第二次世界大战中德国人利用它创建了加密信息。此后,由于Alan Turing和Ultra计划以及其他人的努力,终于对德国人的密码进行了破解。当初,计算机的研究就是为了破解德国人的密码,人们并没有想到计算机会给今天带来的信息革命。随着计算机的发展,运算能力的增强,过去的密码都变得十分简单了,于是人们又不断地研究出了新的数据加密方式,如利用ROSA算法产生的私钥和公钥就是在这个基础上产生的。
    文件加密技术是用来阻止以任何非法获取方式夺得文件后进行阅读、修改等操作,主要是确保文件在传输过程中的安全。尽管非法用户可能通过各种途径获取文件,但如果文件采取了加密方式,那非法用户即使得到了文件也毫无用处,因为他们根本打不开,或者打开后是一堆毫无意义的乱码。文件加密除了可以保护文件外,还可以为电子商务往来、文件传输和电子邮件发送提供动态安全保障。
    文件加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法用户窃取、阅读的目的。该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
    在互联网上进行文件传输、电子邮件商务往来存在许多不安全因素,而这种不安全性是互联网存在基础——TCP/IP协议所固有的,包括一些基于TCP/IP的服务;互联网给众多的商家带来了无限的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。为了解决这一对矛盾、为了能在安全的基础上大开这扇通向世界之门,所以选择了数据加密和基于加密技术的数字签名。
    加密在网络上的作用就是防_LE有用或私有化信息被拦截和窃取。一个简单的例子就是密码的传输,计算机密码极为重要,许多安全防护体系是基于密码的。通过网络进行登录时,所键入的密码以明文的形式被传输到服务器,而网络窃听是一件极为容易的事情,所以很有可能黑客会窃取用户的密码,如果用户是Root用户或Administrator用户,那后果将是极为严重的。密码的泄露在某种意义上来讲意味着其安全体系的全面崩溃。所以现在许多系统的密码均经过了加密系统加密(如本章后面将要介绍的EFS加密系统),这样就相当于多了一重保障。
    还有假如某公司在进行着某个招标项目的投标T作,_T作人员通过电子邮件的方式把标书发给招标单位,如果此时有另一位竞争对手从网络上窃取到该公司的标书,从中知道该公司投标的标的,那后果将不堪设想。
    解决上述难题的方案就足加密,加密后的口令即使被黑客获得也是不可读的;加密后的标书没有收件人的私钥也就无法解开,标书成为一大堆无任何实际意义的乱码。总之,无论是单位还是个人,在某种意义上来说,加密已成为当今网络社会进行文件或邮件安全传输的必要措施。
    数字签名就是基于加密技术的,它的作用就是用来确定发送文件或邮件的人是否是真实的。应用最多的还是电子邮件。如当用户收到一封电子邮件时,邮件上面标有发信人的姓名和信箱地址,很多人可能会简单地认为发信人就是信上说明的那个人,但实际上伪造一封电子邮件是极为容易的事。在这种情况下,就要用到加密技术基础上的数字签名,用它来确认发信人身份的真实性。
 
8.2文件加密和数字签名的应用
 
    按作用不同,文件加密和数宁签名技术主要分为数据传输、数据存储、数据完整性的鉴别以及密钥管理技术4种。
    1.数据传输加密技术
    数据传输加密技术是对传输中的数据流加密,常用的方法有线路加密端对端加密两种线路加密侧重在线路上而不考虑信源与信宿,是对保密信息通过各线路采用不同的加密密钥提供安全保护。端对端加密则指信息由发送者端通过专用的加密软件,采用某种加密技术对所发送文件进行加密,把明文(也即原文)加密成密文(加密后的文件内容是一些看不懂的代码),  然后进入TCP/IP数据包封装穿过互联网。当这些信息到达目的地,将由收件人运用相应的密钥进行解密,使密文恢复成为可读数据明文。目前最常用的加密技术有对称加密技术和非对称加密技术,对称加密技术是指同时运用一个密钥进行加密和解密:非对称加密技术就是加密和解密所用的密钥不一样,它有一对密钥,称为“公钥”和“私钥”,这两个密钥必须配对使用,也就是说用公钥加密的文件必须用相应的私钥才能解密,反之亦然。用非对称加密方式进行加密的软件目前最流行的是PGP软件,具体将在本章后面介绍。
  2.数据存储加密技术
  使用这种加密技术的目的是防止在存储环节上的数据失密,可分为密文存储和存取控制两种。密之存储一般是通过加密法转换、附加密码、加密模块等方法实现。如前面提到的PGP加密软件,它不仅可以为互联网上通信的文件进行加密和数字签名,还可以对本地硬盘文件资料进行加密,防止非法访问。这种加密方式不同于Office文档中的密码保护,用加密软件加密的文件在解密前内容都会进行f匕码转换,把原来普通的数据转变成一堆看不懂的代码,这样就保护了原文件不被非法阅读、修改。存取控制则是对用户资格、权限加以审查和限制,防止非法用户存取数据或合法用户越权存取数据。这种技术主要应用于Windows NT核心系统和一些网络操作系统中,在系统中可以为不同工作组的用户赋予相应的权限以达到保护重要数据不被非法访问。
    3.数据完整性鉴别技术
    数据完整性鉴别技术是对介入信息的传送、存取、处理的人的身份和相关数据内容进行验证,达到保密的要求。一般包括口令、密钥、身份、数据等项的鉴别,系统通过对比验证对象输入的特征值是否符合预先设定的参数,实现对数据的安全保护。这种鉴别技术主要应用于大型的数据库管理系统中,因为一个单位的数据通常是一个单位的命脉,所以保护好公司数据库的安全通常是一项非常重要的责任。数据库系统会根据不同用户设置不同访问权限,并对其身份及权限的完整性进行严格识别。
    4.密钥管理技术
    数据的加密技术通常是运用密钥对数据进行加密,这就涉及到了密钥的管理问题。因为用加密软件进行加密时所用的密钥通常不是我们平常所用的密码那么简单,一般情况这种密钥达64bit,有的达到256bit,因此一一般不可能完全用脑子记住这些密钥,只能保存在一个安全的地方,所以这就涉及到了密钥的管理技术。密钥的保存媒体通常有磁卡、磁带、磁盘、半导体存储器等,但这些都可能有损坏或丢失的危险,所以现在的主流加密软件都采取第三方认证(这第三方可以是个人,也可以是公证机关)或采用随机密钥来弥补人们记忆上的不足,例如PGP加密软件,而且现在的Windows 2000/XP/Server 2003系统以及其他一些加密软件都在慢慢地往这个方向发展。
 
8.3典型数据加密算法
 
    要进行数据加密,就必须采用一定的加密算法。不同的加密算法,安全性也不一样,当然对用户在使用加密文件方面的影响也不一样。在整个数据加密发展历程中,加密标准非常之多,最主要有3种:DES、MD5(早先采用MD2、MD3、MD4)、SHA一1(早先采用SHA-0)和RSA加密,但近期有消息报道,以上4种加密算法中,MD5和SHA一1这两个应用最广的加密算法被我国某大学教授王小云攻破译了。当然对于绝大多数人来说,要破译采用这些加密算法加密的文件,在目前来说还是不太可能的。所以本节仍以以上几种加密算法为例进行介绍。
    以上这些加密算法可以归为两大类,那就是“基于‘消息摘要’的算法”和“对称/非对称密钥加密算法”,下面分别予以介绍。
 
   
 1.基于“消息摘要”的算法
    “消息摘要”(Message Digest)是一种能产生特殊输出格式的算法。这种加密算法的特点是无论用户输入什么长度的原始数据,经过计算后输出的密文都是同定长度的。这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是“摘要”,被“摘要”的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此基于这种原理的算法能对数据完整性提供较为健全的保障。
    但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,
即消息摘要算法是“不可逆”的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证,而不能作为原数据内容的加密方案使用,否则谁也无法还原。尽管如此,“消息摘要”算法还是为密码学提供了健全的防御体系,因为连专家也无法根据拦截到的密文还原出原来的密码内容。
    如今常用的“消息摘要”算法是经历了多年验证发展而保留下来的强者,包括MD2、MD4、MD5、SHA、SHA.1/256/383/512等,其中最广泛应用的是基于MD4发展而来的MD5和SHA—l算法。
  1)MD5算法
  MDfMessage-Digest Algorithm,消息.摘要算法)5诞生于1991年,在20世纪90年代初由Mit Laboratory for Computer Science和Rsa Data Security Inc的Ronald l_Rivest开发出来,经MD2、MD3和MD4发展而来。MD5克服了MD4的缺陷,生成128bit的摘要信息串,出现之后迅速成为主流算法,并在1992年被收录到RFC中。
    不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的计算机。这三个算法的描述和C语言源代码在intemet rfcs 1321中有详细的描述(http://www.ietf.orgJ’rfc/rfcl321.txtl,这是一份最权威的文档,由Ronald 1.Rivest在1992年8月向lEFT提交。
    Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后,以一个16位的检验和追加到信息末尾。并且根据这个新产生的信息计算出散列值。后来,Rogier和Chauvaud发现如果忽略了检验和将产生MD2冲突。使用MD2算法的加密后结果是唯一的,即没有重复。
    为了加强算法的安全性,Rivest在1990年又开发出MD4算法。MD4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除。然后,一个以64位二进制数表示的信息的最初长度被添加进来。信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。Den boer和Bosselaers以及其他人很快发现了MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到MD4完整版本中的冲突,就这样,MD4被很快淘汰了。
    尽管md4算法在安全上有很大的漏洞,但它对后来开发出来的多种信息安全加密算法有着不可忽视的引导作用。除了MD5以外,其中比较有名的还有SHA—l、ripe-md以及haval等。
    一年以后,即1991年,Rivest开发出技术上更为成熟的MD5算法。它在MD4的基础上增加了“安全一带子”(safety-belts)的概念。虽然MD5比MD4更为安全。这个算法很明显由四个和MD4设计有少许不同的步骤组成。在MD5算法中,消息一摘要的大小和填充的必要条件与MD4完全相同。Den Boer和Bosselaers曾发现MD5算法中的假冲突(pseudo-collisions),但除此之外再没有发现其他加密结果。
    MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由4个32位分组组成,将这4个32位分组级联后将生成一个128位散列值。
    在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(bits length)将被扩展至n*5 12+448,即n'64+56个字节(bytes),n为一个正整数。填充的方法如下,在信息的后面填充一个l和无数个0,直到满足上面的条件时才停止用O对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度=n。512+448+64=(n+1)。512,即长度恰好是512的整数倍。这样做是为了满足后面处理中对信息长度的要求。
    MD5中有4个32位被称作链接变量(chaining variable)的整数参数,他们分别为:
a=0x01234567。b=0x89abcdef,c=0xfedcba98,d=0x76543210。当设置好这四个链接变量后,
就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。
    MD5的典型应用是对一段信息(message)产生信息摘要(message-digest),以防止被篡改。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要对这个文件进行MD5计算就会发现信息摘要不相同,由此可以确定得到的只是一个不正确的文件。如果再有一个第三方的认证机构,使用MD5算法还可以防止文件作者的抵赖,这就是所谓的数字签名应用了。
    MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5算法(或其他类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。
  2)SHA.1算法
  MD5和SHA—l都属于散列(Hash)算法,其作用是可以将不定长的信息(原文)经过处理后得到一个定长的摘要信息串,对同样的原文用同样的散列算法进行处理,每次得到的信息摘要串相同。Hash算法是单向的,一日.数据被转换,就无法再以确定的方法获得其原始值。事实上,在绝大多数情况下,原文的长度都超过摘要信息串的长度,因此,在散列计算过程中,原文的信息被部分丢失,这使得原文无法从摘要信息重构。散列算法的这种不可逆特征使其很适合被用来确认原文(例如公文)的完整性,因而被广泛用于数字签名的场合。
    如果对两段不同的信息使用相同散列算法,得到的摘要信息相同,则称之为碰撞,散列算法通常还可以保证碰撞也很难根据摘要被求出。
    SHA(Secure Hash Algorithm,安全哈希算法)诞生于1993年,由美国国家安全局(NSA)设计,之后被美国标准与技术研究院(NIST)收录到美国的联邦信息处理标准(FIPS)中,成为美国国家标准。SHA(后来被称作SHA-0)于1995年被SHA一1(RFC3174)替代。SHA一1生成长度为160bit的摘要信息出,虽然之后又出现了SHA-224、SHA-256、SHA-384和SHA-512等被统称为“SHA-2”的系列算法,但现在仍以SHA一1为主流算法。
    MD5和SHA一1是当前应用最为广泛的两种敞列算法。F臼于MD5与SHA.1均是从MD4发展fm来,它们的结构和强度等特性有很多相似之处,SHA一1与MD5的最大区别在于其摘要比MD5摘要长32比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5是2比。数量级的操作,SHA—l是2160数量级的操作。产生具有相同摘要的两个报文的难度:MD5是204是数革级的操作,SHA.1是2so数量级的操作。因而,SHA—l对强行攻击的强度更大。但}h于SHA.1的循环步骤比MD5多(80:64)且要处理的缓存大(160比特:128比特),SHA—l的运行速度比MD5慢。常见的Unix系统口令以及多数论坛/社区系统的口令都是经MD5处理后保存其摘要信息串,在互联lxxJ上,很多文件在开放下载的同时都提供一个MD5的信息摘要,使下载方(通过MD5摘要计算)能够确认所下载的文件与原文件一致,以此来防止文件被篡改。
    MD5和SHA—l还常被用来与公钥技术结合创建数字签名。当前几乎所有主要的信息安全协议中都使用了SHA.1或MD5,包括SSL(HTTPS就是SSL的一种应用)、TLS、PGP、SSH、S/MIME和1PSec,冈此可以说SHA—l和MD5是当前信息安全的重要基础之一。
    不过,从技术上讲MD5和SHA.1的碰撞町在短时问内被求解出并不意味着两种算法完全失效。例如,对于公文的数字签名来说,寻找到碰撞与寻找到有特定含义的碰撞之间仍有很大的差距,而后者才会使伪造数宁公文成为现实。但无论如何,近期国内土小云教授所掌握的方法已经为始时间内寻找剑MD5或SHA一1的碰撞成为可能,从理论上来讲目前普遍采用的MD5或SHA—l算法很难成为现在的文件加密和数字签名算法依据,但是由于到目前为止还没有找到种比MD5和SHA一1算法更难破解的算法,所以在2005年的4月l号,我国还是正式批准了采用这种算法的电子签名法。
 
 
   2.“对称/非对称密钥”加密算法
 
    由于“摘要”算法加密的数据仪仅能作为一种身份验证的凭据使用,如果要对整个文档数据进行加密,就不能采用这种“不可逆”的算法了,凶此“密钥”算法(Key Encoding)的概念被提出。此类算法通过一个被称为“密钥”的凭据进行数据加密处理,接收方通过加密时使用的“密钥”字符串进行解密,即双办持有的“密钥”相同(对称)。如果接收方不能提供正确的“密钥”,解密出来的就不是原来的数据了。
    以下是“对称密钥”的概念,“非对称密钥”就是加密和解密文件的密钥不一样。用于加密的是“公钥”(Public Key),而用于解密的是“私钥”(Private Key),公钥是可以公开的,而私钥则不能公丌。这种算法规定,对方发送数据前,可以用“公钥”加密,但是这个“公钥”也无法解开它自己加密的数据,即加密过程是单向的,这样即使数据在途中被拦截,入侵者也无法对其进行破解。当文件剑达后,可以用“私钥”解密,而且只有对应的私钥才可以解密相应用户的公钥加密的文件。这就是“非对称密钥”加密算法,也称为“公共密钥算法”,这两者均建市在PKI(公钥基础设施)验证体系结构上。
    基于“对称密钥”的加密算法有DES、TripleDES、RC2、RC4、RC5和Blowfish等;基于“非对称常钥”的加密算法有RSA、Diffie-Hellman等。
    1)DES算法
    DES(Data Encryption Standard,数据加密标准)是最早、最著名的保密密钥或对称密钥加密算法,它是由IBM公司在70年代发展起来的,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准,20年来,它一直活跃在国际保密通信的舞台上,扮演了十分重要的角色。
    目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN(个人身份识别码)的加密传输,IC卡与POS(计算机交易系统)间的双向认证、金融交易数据包的MAC(媒体访问控制)校验等,均用到DES算法。
    DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个对称算法:
加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8位都用作奇偶校验),密匙可以是任意的56位数,而且可以在任意时候改变。其中有极少量的数被认为是弱密匙,但是很容易避开他们,所以其保密性依赖于密钥。DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空问为256,这意味着如果一台计算机每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见这是难以实现的。当然,随着科学技术的发展,当出现超高速计算机后,还可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。
    DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式f64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
    DES算法的工作原理为:DES对一个64位的明文分组M进行加密操作,M经过一个初始
置换IP,置换成mO,将mO明文分成左半部分和右半部分mO=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f’在运算过程中数据与密匙结合。经过16轮后,左、右半部分合在一起经过一个末置换,这样就完成了。在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。
    DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1、K2、
K3….K16那么解密密匙就是K16、K15、K14…K1。
 
1)       RC算法
 
  RC系列算法是大名鼎鼎的RSA(Rivest,Shamir,Adleman)三人设计的密钥长度可变的流加密算法,其中最流行的是RC4算法,RC系列算法可以使用2048位的密钥,该算法的速度可以
达到DES加密的10倍左右。
    RC4算法的原理包括初始化算法和伪随机子密码生成算法两大部分,在初始化的过程中,密钥的主要功能是将一个256字节的初始数簇进行随机搅乱,不同的数簇在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,得到的子密钥序列和明文进行异或运算(XOR)后,得到密文。
    由于RC4算法加密采用的是异或,所以一旦子密钥序列出现了重复,密文就有可能被破解,但是目前还没有发现密钥长度达到128位的RC4有重复的可能性,所以RC4是目前最安全的加密算法之一。
  3)RSA算法
  RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。
    RSA算法原理如下。
    (1)随机选择两个大质数p和q,p不等于q,计算N=pq。
    (2)选择一个大于l小于N的自然数e,e必须与(p一1)(q—1)互素。
    (3)用公式计算出d:dxe=1(mod(p—1)(q—1))。
    (4)销毁p和q。
    最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。
    RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA比DES慢很多,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。
原文地址:https://www.cnblogs.com/redcoatjk/p/3822585.html