📄 200551195112.html
字号:
<P>循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。</P>
<P> </P>
<P> 二.基于公钥的加密算法</P>
<P> </P>
<P> 一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。</P>
<P> </P>
<P> rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。</P>
<P> </P>
<P> 我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。</P>
<P> </P>
<P> 一些简单的基于rsa算法的加密算法可在下面的站点找到:</P>
<P> <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa" target=_blank><FONT color=#0000ff>ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa</FONT></A> </P>
<P> </P>
<P> 三.一个崭新的多步加密算法</P>
<P> </P>
<P> 现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在1998年6月1日才正式公布的。下面详细的介绍这个算法:</P>
<P>使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:</P>
<P>把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用"shotgun technique"技术来产生解码表。基本上说,如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。</P>
<P> </P>
<P> 使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:</P>
<P> </P>
<P> crypto1 = a[crypto0][value]</P>
<P> </P>
<P> 变量'crypto1'是加密后的数据,'crypto0'是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子” 是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试: 使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的"种子"。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。</P>
<P> </P>
<P> 加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee"可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。</P>
<P> </P>
<P> 如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。 这个算法产生了一系列的随机数。算法如下:</P>
<P> </P>
<P>unsigned long dw1, dw2, dw3, dwmask;</P>
<P>int i1;</P>
<P>unsigned long arandom[256];</P>
<P> </P>
<P>dw1 = {seed #1};</P>
<P>dw2 = {seed #2};</P>
<P>dwmask = {seed #3};</P>
<P>// this gives you 3 32-bit "seeds", or 96 bits total</P>
<P>for(i1=0; i1 < 256; i1++)</P>
<P>{</P>
<P>dw3 = (dw1 + dw2) ^ dwmask;</P>
<P>arandom[i1] = dw3;</P>
<P>dw1 = dw2;</P>
<P>dw2 = dw3;</P>
<P>}</P>
<P> </P>
<P> 如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:</P>
<P> </P>
<P>int __cdecl mysortproc(void *p1, void *p2)</P>
<P>{</P>
<P>unsigned long **pp1 = (unsigned long **)p1;</P>
<P>unsigned long **pp2 = (unsigned long **)p2;</P>
<P>if(**pp1 < **pp2)</P>
<P>return(-1);</P>
<P>else if(**pp1 > *pp2)</P>
<P>return(1);</P>
<P>return(0);</P>
<P>}</P>
<P> </P>
<P>...</P>
<P>int i1;</P>
<P>unsigned long *aprandom[256];</P>
<P>unsigned long arandom[256]; // same array as before, in this case</P>
<P>int aresult[256]; // results go here</P>
<P> </P>
<P>for(i1=0; i1 < 256; i1++)</P>
<P>{</P>
<P>aprandom[i1] = arandom + i1;</P>
<P>}</P>
<P> </P>
<P>// now sort it</P>
<P>qsort(aprandom, 256, sizeof(*aprandom), mysortproc);</P>
<P> </P>
<P>// final step - offsets for pointers are placed into output array</P>
<P>for(i1=0; i1 < 256; i1++)</P>
<P>{</P>
<P>aresult[i1] = (int)(aprandom[i1] - arandom);</P>
<P>}</P>
<P>...</P>
<P> </P>
<P> 变量'aresult'中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。</P>
<P> </P>
<P> 作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。</P>
<P> </P>
<P> 四.结论:</P>
<P> 由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。</P>
<P> </P>
<P> </P>
<P> </P>
<P>参考文献:</P>
<P> </P>
<P>1 . pgp! <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://www.pgpi.com/" target=_blank><FONT color=#0000ff>http://www.pgpi.com/</FONT></A> </P>
<P>cyber knights(new link) <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://members.tripod.com/cyberkt/" target=_blank><FONT color=#0000ff>http://members.tripod.com/cyberkt/</FONT></A> </P>
<P>(old link: <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://netnet.net/~merlin/knights/" target=_blank><FONT color=#0000ff>http://netnet.net/~merlin/knights/</FONT></A> )</P>
<P>2 . crypto chamber <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://www.jyu.fi/~paasivir/crypt/" target=_blank><FONT color=#0000ff>http://www.jyu.fi/~paasivir/crypt/</FONT></A> </P>
<P> </P>
<P>3 . ssh cryptograph a-z (includes info on ssl and https) <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://www.ssh.fi/tech/crypto/" target=_blank><FONT color=#0000ff>http://www.ssh.fi/tech/crypto/</FONT></A> </P>
<P> </P>
<P>4 . funet' cryptology ftp (yet another finland resource) <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="ftp://ftp.funet.fi/pub/crypt/" target=_blank><FONT color=#0000ff>ftp://ftp.funet.fi/pub/crypt/</FONT></A> </P>
<P>a great enigma article, how the code was broken by polish scientists</P>
<P><IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://members.aol.com/nbrass/1enigma.htm" target=_blank><FONT color=#0000ff>http://members.aol.com/nbrass/1enigma.htm</FONT></A> </P>
<P> </P>
<P>5 . ftp site in uk <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="ftp://sable.ox.ac.uk/pub/crypto/" target=_blank><FONT color=#0000ff>ftp://sable.ox.ac.uk/pub/crypto/</FONT></A> </P>
<P> </P>
<P>6 . australian ftp site <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="ftp://ftp.psy.uq.oz.au/pub/" target=_blank><FONT color=#0000ff>ftp://ftp.psy.uq.oz.au/pub/</FONT></A> </P>
<P> </P>
<P>7 . replay associates ftp archive <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="ftp://utopia.hacktic.nl/pub/replay/pub/crypto/" target=_blank><FONT color=#0000ff>ftp://utopia.hacktic.nl/pub/replay/pub/crypto/</FONT></A> </P>
<P> </P>
<P>8 . rsa data security (why not include them too!) <IMG src="http://www.51lw.com/article/img/url.gif" align=absMiddle> <A href="http://www.rsa.com/" target=_blank><FONT color=#0000ff>http://www.rsa.com/</FONT></A> </P>
<P>netscape's whitepaper on ssl</P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD> </TD></TR>
<TR>
<TD> </TD></TR></TBODY></TABLE>
<TABLE style="BORDER-TOP: #cccccc 1px solid" cellSpacing=0 cellPadding=0
width=770 align=center bgColor=#ffffff border=0 class=line150>
<TBODY>
<TR><TD> </TD><TD> </TD></TR>
<TR bgcolor="#e8e8e8"><TD align=center>天极源码下载同步更新</TD><TD align=center>天极娱乐下载同步更新</TD></TR>
<TR>
<TD>
<DIV align=center>
<iframe frameborder="0" src="http://www.mydown.com/mydown/include/newcode.html" scrolling="no" width="100%"></iframe>
</DIV>
</TD>
<TD align=center>
<DIV align=center>
<iframe frameborder="0" src="http://www.mydown.com/mydown/include/newtests.html" scrolling="no" width="100%"></iframe>
</DIV>
</TD>
</TR>
<TR><TD> </TD><TD> </TD></TR>
</TBODY></TABLE>
<script language="Javascript">document.write("<img src='http://counter.yesky.com/counter.shtml?CID=21009&AID=0&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+"' border='0' alt='' width='0' height='0'>");</script>
<noscript><img src="http://counter.yesky.com/counter.shtml?CID=21009&AID=0&refer=noscriptcounter&cur=noscriptcounter" border='0' width='0' height='0'/></noscript>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -