“李喵喵”通过精心收集,向本站投稿了10篇文档或数据进行加密方法,以下是小编帮大家整理后的文档或数据进行加密方法,欢迎大家分享。

篇1:文档或数据进行加密方法
第一部:操作系统级加密 Windows /XP提供了对文件夹进行加密的功能,当然我们也可以用它来保护文件,
文档或数据进行加密方法
,
在使用操作系统提供的加密功能前,需要确认待加密文件夹所在的分区格式为NTFS,因为只有在NTFS下才能使用这个功能,可以在命令提示符窗口中运行convert
篇2:数据加密技术
数据加密技术
数据加密技术我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。数据加密与解密从宏观上讲是非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。
一:数据加密方法
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。
幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。
对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。
与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的'特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。
但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。
在一些情况下,我们想能够知道数据是否已经被篡改了或被破坏了,这时就需要产生一些校验码,并且把这些校验码插入到数据流中。这样做对数据的防伪与程序本身都是有好处的。但是感染计算机程序的病毒才不会在意这些数据或程序是否加过密,是否有数字签名。所以,加密程序在每次load到内存要开始执行时,都要检查一下本身是否被病毒感染,对与需要加、解密的文件都要做这种检查!很自然,这样一种方法体制应该保密的,因为病毒程序的编写者将会利用这些来破坏别人的程序或数据。因此,在一些反病毒或杀病毒软件中一定要使用加密技术。
循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,例如 xmodem-crc。 这是方法已经成为标准,而且有详细的文档。但是,基于标准crc算法的一种修改算法对于发现加密数据块中的错误和文件是否被病毒感染是很有效的。
二.基于公钥的加密算法
一个好的加密算法的重要特点之一是具有这种能力:可以指定一个密码或密钥,并用它来加密明文,不同的密码或密钥产生不同的密文。这又分为两种方式:对称密钥算法和非对称密钥算法。所谓对称密钥算法就是加密解密都使用相同的密钥,非对称密钥算法就是加密解密使用不同的密钥。非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法。加密密钥,即公钥,与解密密钥,即私钥,是非常的不同的。从数学理论上讲,几乎没有真正不可逆的算法存在。例如,对于一个输入‘a’执行一个操作得到结果‘b’,那么我们可以基于‘b’,做一个相对应的操作,导出输入
‘a’。在一些情况下,对于每一种操作,我们可以得到一个确定的值,或者该操作没有定义(比如,除数为0)。对于一个没有定义的操作来讲,基于加密算法,可以成功地防止把一个公钥变换成为私钥。因此,要想破译非对称加密算法,找到那个唯一的密钥,唯一的方法只能是反复的试验,而这需要大量的处理时间。
rsa加密算法使用了两个非常大的素数来产生公钥和私钥。即使从一个公钥中通过因数分解可以得到私钥,但这个运算所包含的计算量是非常巨大的,以至于在现实上是不可行的。加密算法本身也是很慢的,这使得使用rsa算法加密大量的数据变的有些不可行。这就使得一些现实中加密算法都基于rsa加密算法。pgp算法(以及大多数基于rsa算法的加密方法)使用公钥来加密一个对称加密算法的密钥,然后再利用一个快速的对称加密算法来加密数据。这个对称算法的密钥是随机产生的,是保密的,因此,得到这个密钥的唯一方法就是使用私钥来解密。
我们举一个例子:假定现在要加密一些数据使用密钥‘12345’。利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时,解密程序找到加密过的密钥,并利用rsa私钥解密出来,然后再确定出数据的开始位置,利用密钥‘12345’来解密数据。这样就使得一个可靠的经过高效加密的数据安全地传输和解密。
一些简单的基于rsa算法的加密算法可在下面的站点找到:
ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa
三.一个崭新的多步加密算法
现在又出现了一种新的加密算法,据说是几乎不可能被破译的。这个算法在6月1日才正式公布的。下面详细的介绍这个算法:
使用一系列的数字(比如说128位密钥),来产生一个可重复的但高度随机化的伪随机的数字的序列。一次使用256个表项,使用随机数序列来产生密码转表,如下所示:
把256个随机数放在一个距阵中,然后对他们进行排序,使用这样一种方式(我们要记住最初的位置)使用最初的位置来产生一个表,随意排序的表,表中的数字在0到255之间。如果不是很明白如何来做,就可以不管它。但是,下面也提供了一些原码(在下面)是我们明白是如何来做的。现在,产生了一个具体的256字节的表。让这个随机数产生器接着来产生这个表中的其余的数,以至于每个表是不同的。下一步,使用“shotgun technique”技术来产生解码表。基本上说,如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一个在0到255之间的数)。在一个循环中赋值,使用一个256字节的解码表它对应于我们刚才在上一步产生的256字节的加密表。
使用这个方法,已经可以产生这样的一个表,表的顺序是随机,所以产生这256个字节的随机数使用的是二次伪随机,使用了两个额外的16位的密码.现在,已经有了两张转换表,基本的加密解密是如下这样工作的。前一个字节密文是这个256字节的表的索引。或者,为了提高加密效果,可以使用多余8位的值,甚至使用校验和或者crc算法来产生索引字节。假定这个表是256*256的数组,将会是下面的样子:
crypto1 = a[crypto0][value]
变量'crypto1'是加密后的数据,'crypto0'是前一个加密数据(或着是前面几个加密数据的一个函数值)。很自然的,第一个数据需要一个“种子”,这个“种子” 是我们必须记住的。如果使用256*256的表,这样做将会增加密文的长度。或者,可以使用你产生出随机数序列所用的密码,也可能是它的crc校验和。顺便提及的是曾作过这样一个测试: 使用16个字节来产生表的索引,以128位的密钥作为这16个字节的初始的“种子”。然后,在产生出这些随机数的表之后,就可以用来加密数据,速度达到每秒钟100k个字节。一定要保证在加密与解密时都使用加密的值作为表的索引,而且这两次一定要匹配。
加密时所产生的伪随机序列是很随意的,可以设计成想要的任何序列。没有关于这个随机序列的详细的信息,解密密文是不现实的。例如:一些ascii码的序列,如“eeeeeeee“可能被转化成一些随机的没有任何意义的乱码,每一个字节都依赖于其前一个字节的密文,而不是实际的值。对于任一个单个的字符的这种变换来说,隐藏了加密数据的有效的真正的长度。
如果确实不理解如何来产生一个随机数序列,就考虑fibbonacci数列,使用2个双字(64位)的数作为产生随机数的种子,再加上第三个双字来做xor操作。 这个算法产生了一系列的随机数。算法
如下:
unsigned long dw1, dw2, dw3, dwmask;
int i1;
unsigned long arandom[256];
dw1 = {seed #1};
dw2 = {seed #2};
dwmask = {seed #3};
// this gives you 3 32-bit ”seeds“, or 96 bits total
for(i1=0; i1 < 256; i1++)
{
dw3 = (dw1 + dw2) ^ dwmask;
arandom[i1] = dw3;
dw1 = dw2;
dw2 = dw3;
}
如果想产生一系列的随机数字,比如说,在0和列表中所有的随机数之间的一些数,就可以使用下面的方法:
int __cdecl mysortproc(void *p1, void *p2)
{
unsigned long **pp1 = (unsigned long **)p1;
unsigned long **pp2 = (unsigned long **)p2;
if(**pp1 < **pp2)
return(-1);
else if(**pp1 > *pp2)
return(1);
return(0);
}
...
int i1;
unsigned long *aprandom[256];
unsigned long arandom[256]; // same array as before, in this case
int aresult[256]; // results go here
for(i1=0; i1 < 256; i1++)
{
aprandom[i1] = arandom + i1;
}
// now sort it
qsort(aprandom, 256, sizeof(*aprandom), mysortproc);
// final step - offsets for pointers are placed into output array
for(i1=0; i1 <
256; i1++)
{
aresult[i1] = (int)(aprandom[i1] - arandom);
}
...
变量'aresult'中的值应该是一个排过序的唯一的一系列的整数的数组,整数的值的范围均在0到255之间。这样一个数组是非常有用的,例如:对一个字节对字节的转换表,就可以很容易并且非常可靠的来产生一个短的密钥(经常作为一些随机数的种子)。这样一个表还有其他的用处,比如说:来产生一个随机的字符,计算机游戏中一个物体的随机的位置等等。上面的例子就其本身而言并没有构成一个加密算法,只是加密算法一个组成部分。
作为一个测试,开发了一个应用程序来测试上面所描述的加密算法。程序本身都经过了几次的优化和修改,来提高随机数的真正的随机性和防止会产生一些短的可重复的用于加密的随机数。用这个程序来加密一个文件,破解这个文件可能会需要非常巨大的时间以至于在现实上是不可能的。
四.结论:
由于在现实生活中,我们要确保一些敏感的数据只能被有相应权限的人看到,要确保信息在传输的过程中不会被篡改,截取,这就需要很多的安全系统大量的应用于政府、大公司以及个人系统。数据加密是肯定可以被破解的,但我们所想要的是一个特定时期的安全,也就是说,密文的破解应该是足够的困难,在现实上是不可能的,尤其是短时间内。
参考文献:
1 . pgp! www.pgpi.com/
cyber knights(new link) members.tripod.com/cyberkt/
(old link: netnet.net/~merlin/knights/ )
2 . crypto chamber www.jyu.fi/~paasivir/crypt/
3 . ssh cryptograph a-z (includes info on ssl and https) www.ssh.fi/tech/crypto/
4 . funet' cryptology ftp (yet another finland resource) ftp://ftp.funet.fi/pub/crypt/
a great enigma article, how the code was broken by polish scientists
members.aol.com/nbrass/1enigma.htm
5 . ftp site in uk ftp://sable.ox.ac.uk/pub/crypto/
6 . australian ftp site ftp://ftp.psy.uq.oz.au/pub/
7 . replay associates ftp archive ftp://utopia.hacktic.nl/pub/replay/pub/crypto/
8 . rsa data security (why not include them &n
bsp;too!) www.rsa.com/
netscape's whitepaper on ssl
developer1.netscape.com/docs/manuals/security/sslin/contents.htm
篇3:数据加密技术-
我们经常需要一种措施来保护我们的数据,防止被一些怀有不良用心的人所看到或者破坏。在信息时代,信息可以帮助团体或个人,使他们受益,同样,信息也可以用来对他们构成威胁,造成破坏。在竞争激烈的大公司中,工业间谍经常会获取对方的情报。因此,在客观上就需要一种强有力的安全措施来保护机密数据不被窃取或篡改。数据加密与解密从宏观上讲是非常简单的,很容易理解。加密与解密的一些方法是非常直接的,很容易掌握,可以很方便的对机密数据进行加密和解密。

篇4:数据加密技术
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。
幸运的是,在所有的加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的`,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。
对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。
与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为listen,但所有的字母都没有变化,没有增加也没有减少,但是字母之间的顺序已经变化了。
但是,还有一种更好的加密算法,只有计算机可以做,就是字/字节循环移位和xor操作。如果我们把一个字或字节在一个数据流内做循环移位,使用多个或变化的方向(左移或右移),就可以迅速的产生一个加密的数据流。这种方法是很好的,破译它就更加困难!而且,更进一步的是,如果再使用xor操作,按位做异或操作,就就使破译密码更加困难了。如果再使用伪随机的方法,这涉及到要产生一系列的数字,我们可以使用fibbonaci数列。对数列所产生的数做模运算(例如模3),得到一个结果,然后循环移位这个结果的次数,将使破译次密码变的几乎不可能!但是,使用fibbonaci数列这种伪随机的方式所产生的密码对我们的解密程序来讲是非常容易的。
[1] [2] [3] [4]
篇5:数据加密技术
在传统上,我们有几种方法来加密数据流。所有这些方法都可以用软件很容易的实现,但是当我们只知道密文的时候,是不容易破译这些加密算法的(当同时有原文和密文时,破译加密算法虽然也不是很容易,但已经是可能的了)。最好的加密算法对系统性能几乎没有影响,并且还可以带来其他内在的优点。例如,大家都知道的pkzip,它既压缩数据又加密数据。又如,dbms的一些软件包总是包含一些加密方法以使复制文件这一功能对一些敏感数据是无效的,或者需要用户的密码。所有这些加密算法都要有高效的加密和解密能力。
幸运的是,在所有的加密算法中最简单的'一种就是“置换表”算法,这种算法也能很好达到加密的需要。每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件。加密程序和解密程序都需要一个这样的“置换表”。事实上,80x86 cpu系列就有一个指令‘xlat’在硬件级来完成这样的工作。这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了。更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了。这种方法在计算机出现之前就已经被广泛的使用。
对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身。这时,破译变的更加困难,因为黑客必须正确的做几次变换。通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译。比如,我们可以对所有的偶数位置的数据使用a表,对所有的奇数位置使用b表,即使黑客获得了明文和密文,他想破译这个加密方案也是非常困难的,除非黑客确切的知道用了两张表。
与使用“置换表”相类似,“变换数据位置”也在计算机加密中使用。但是,这需要更多的执行时间。从输入中读入明文放到一个buffer中,再在buffer中对他们重排序,然后按这个顺序再输出。解密程序按相反的顺序还原数据。这种方法总是和一些别的加密算法混合使用,这就使得破译变的特别的困难,几乎有些不可能了。例如,有这样一个词,变换起字母的顺序,slient 可以变为lis
[1] [2] [3] [4] [5] [6] [7]
篇6:python 数据加密代码
最近更 新
python数据结构树和二叉树简介
python计算圆周长、面积、球体体积并画出
树莓派中python获取GY-85九轴模块信息示例
Python内置的字符串处理函数整理
Python实例分享:快速查找出被挂马的文件
python通过ElementTree操作XML获取结点读
python获取糗百图片代码实例
python解决字典中的值是列表问题的方法
Python多线程学习资料
Python正则表达式介绍
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
篇7:pdf文档怎么加密,pdf加密方法
具体加密方法如下:
1、打开一个任意的PDF文档;
2、选择菜单栏的“文档”;
3、选择“文档”里的“安全性”一栏;
4、再选择“安全性”里的“显示本文档的安全性设置”一栏
5、这样进入了“文档属性”对话框,用鼠标点击一下“安全性方法”,就会出现一个下拉菜单,然后选择“口令安全性”;
6、这样进入“口令安全性―设置”对话框,这样有二处可供选择:
a:“要求打开文档口令”,如果用鼠标在小框内点击一下,这样就会把它勾上,然后你输入你的密码――确认,这样,当别人点击这个文件时,就会弹出“请输入口令”的对话框,如果不知道密码的人士,是完全看不见里面的内容的。
b:“使用口令来限制文档的打印和编辑以及它的安全性设置”,如果用鼠标在小框内点击一下,这样就会把它勾上,然后你输入你的密码――确认,
这样就给你的当前PDF文件加密了,当别人打开你的这个文件,可以看见其内容,但别人不能修改、打印等等
设置 PDF 的口令(这是来自官方的说明,你可以尝试操作。)
您可以通过设置口令和禁止某些功能(例如,打印和编辑)来限制对 PDF 的访问。
PDF 包含两种口令:“文档打开口令”和“许可口令”。当您设置了“文档打开口令”(也称作“用户”口令)后,用户必须键入您指定的口令才能打开 PDF。 当您设置了“许可口令”(也称作“主”口令)后,收件人无需口令即可打开文档,但其必须键入“许可口令”才能设置或更改受限制的功能。 如果 PDF 同时被这两种口令保护,则使用其中任一口令即可将其打开,但必须使用“许可口令”才能更改受限制的功能。为了更高的安全性,同时设置两种口令较好。
所有 Adobe 产品均强制执行由“许可口令”设置的限制。但是,由于第三方产品可能不支持或忽略这些设置,文档收件人可能会绕过您设置的某些或所有限制。
重要说明: 如果您忘记了口令,将无法从文档恢复口令。 请考虑保留没有口令保护的 PDF 的备份。
请执行以下任一操作:
请单击“任务”工具栏上的“安全”按钮 ,然后选择“删除安全性设置”。 键入您的口令,然后在有关删除安全性的提示中单击“是”。
请在“文档属性”对话框的“安全性”标签中,从“安全性方法”菜单选择“无安全性设置”。
如果出现提示,请输入“许可口令”,然后单击“确定”。
篇8:如何策略使用加密狗进行加密
针对于使用加密狗的解密有什么方法?
1、硬件复制
复制硬件,即解密者复制Sentinel Superpro相同的加密锁。由于加密锁采用了彩虹公司专用的ASIC芯片技术,因此复制该加密锁非常困难,且代价太大。
2、监听
解密者利用并口监听程序,进行解密,其工作机制是:
监听程序,记录应用程序对并口发的查询串和加密锁发回的响应串。当移去加密锁时,如果程序再对并口发查询串确认身份时,监听程序返回所记录的响应串。程序认为加密锁仍然在并口上,是合法用户继续运行,应用程序也就被解密了。
3、打印机共享器
将加密锁插在打印机共享器上,多台计算机共同使用打印机共享器上的一把加密锁。(后面简述对抗策略)
4、DEBUG
解密者DEBUG等反编译程序,修改程序源代码或跳过查询比较。应用程序也就被解密了。
对于以上的几种解密方法加密者可以考虑使用以下几种加密策略:
1、针对上述监听和DEBUG问题解密方法,本人推荐充分利用加密狗开发商的API函数调用的加密策略:
a、针对并口监听程序
1)对加密锁进行算法查询
?正确的查询响应验证
用户生成大量查询响应对,如200对。在程序运行过程中对激活的加密算法单元随机的发送在200对之中的一对“345AB56E”―――“63749128”。查询串“345AB56E”,哪么算法单元返回的下确的响应串应该是“63749128”,若是,则程序认为加密锁在并口上,是合法用户,继续运行,反之终止程序。
?随机非激活算法验证
我们对非激活的加密锁算法单元发随机生成的查询串,如:“7AB2341”,非激活算法单元只要是有查询就会有响应串。因此返回响应串“7AB2341”,在程序中判断响应串与查询串是否相同,如果相同,则证明我们的加密锁仍然在口上。继续运行程序。
?随机激活算法验证
假设监听程序了解了上面的机制。即对非激活的加密算法我们发什么查询串则返回相同的响应串。哪么我也有对策。对激活的加密算法单元发随机生成的查询串,如:“345AB56E”由于是激活算法响应串肯定与查询串肯定不等。所以假如返回响应串“7253ABCD”,在程序中判断响应串与查询串是否不同,如果不同,则证明我们的加密锁仍然在并口上,继续运行程序。
上面三种加密策略在程序同时使用,相符相承,相互补充。即使监听程序记录下来我们的部分查询响应。
2)分时查询
用户把查询响应对分组,如120对分为4组。每30对一组。头三个月使用第一组,第二个月三个月使用第二组以此类推,监听程序就算记录了头三个月。第二个月三个月以后程序仍然无法使用。
也可以再生成100对“临时委员”,每次运行随意抽出1对与以上分组结合使用。使记录程序在三个月内也无法记录完全。程序也无法使用。
3)随机读写存储单元
为了防监听程序。我们的策略是:程序在启动时,我们利用随机函数随机生成的一个数,假设是“98768964”。我们在指定的18#单元写入这个数。哪么我们在程序运行中,每调用一个功能程序前读取18#单元,数判定是否是我们写入的数“98768964”。因为每次写入的数是随机生成的,所以监听程序记录不到当次启动时写入的随机数,它返回的数肯定是一个不匹配的数。我们就可以就此判定是否是合法用户。Sentinel Superpro加密锁可以重复写10万次以上。也就是说每天写三次也可以使用一百年。
2、针对打印共享器的加密策略
为了防打印共享器。我们的策略是:程序在启动时,我们利用随机函数随要生成的一个数,假设是“7762523A”。我们在指定的34#单元写入这个数。哪么在程序运行中,每调用一个功能程序前读取34#单元,以判定是否是我们写入的数“7762523A”。以此判定是否是合法用户。因为每次写入的数随机生成的,同时使用打印共享器的其他非法用户的程序一进入也会写入一个不同的随机数。那么第一个用户的程序在校验是否是第一个用户写入的数时,就会被认为是非法的用户。所以在一个阶段也只是一个程序使用。(例如RAINBOW公司开的Sentinel Superpro加密锁可以重复10万次以上。也就是说每天写三次也就可以使用一百年。)
3、针对DEBUG跟踪的加密锁的安全策略
1)分散法
针对DEBUG跟踪。在调用每个重要功能模块前,我们建议要对加密锁进行查询,校验身份。如果只在程序开始部分校验身份,DEBUG跟踪程序部分可以轻易的跳过校验部分,而一些不良用户可以在验证后可以将加密锁拔下用在其它计算机。
2)延时法
针对某一具体查询校验,都有三步骤:
?查询得到响应串
?比较响应串和查询串是否匹配
?执行相应的步骤
我们建议以上三个步骤要延时执行。最好鼗三步骤相互远离些,甚至放到不同的子程序或函数中。例如:我们执行“查询得到响应串” 后,相隔50执行“比较响应串和查询串是否匹配”。假如程序需要调用一个函数。哪么我们就在这个函数里执行“执行相应的步骤”。这样程序更难于被。
3)整体法
将响应串作为程序中数据使用。
例如:我们有返回值“87611123”,而我们程序需要“123”这个数。我们可以让“87611123”减去“8761000”得到“123”。这样以来任何对加密程序的修改都会使程序紊乱。
4)迷惑法
一般情况下我们的程序执行相应的验证步骤。验证是非法用户就会退出。这样很容易被发现代码特征。我们知道是非法用户后继续执行一些无用的操作使程序紊乱。以迷惑解密者。
篇9:VC++中实现数据加密
为了保证数据的安全性与完整性,常常要对数据进行加密,在数据传输过程进行数据加密可以防止中途非法截获,我们通常称原始数据叫做源文,用约定的加密算法进行加密处理。加密算法的输入是源文与加密键,而输出的则是密文。加密算法可以分为两种,一种是密键加密算法,一种是明键加密法。
一、密键加密法:
加密算法可以公开,但加密键一定要保密。密文对不知道加密键的人来说,是不容易解密的。如下述算法:
A.把源文分成等长的块,每块的长度和加密键的长度相等,对长度不够的块用空格补充;
B.用自己定义的整数代替源文的数据;
C.对加密键也进行数据替换操作;
D.对源文的整数码与加密键相应字符的整数码进行相加,然后对某一整数进行取模操作;
E.将整数码再用相应的字符进行替换,这样就得到了密文。
实现代码如下:
CString CEncryptDlg::Encrypt_Key(CString Source,CString Key)
{
int iSourceLen,iKeyLen;
int iCount;
div_t div_Result;
char strTarget[255];
char pKey[255],pSource[255],pMid[255];
CString strTmp;
int i,j,n;
BYTE PWD_key[255];
j=0;
for (i=32;i<=126;i++)
{
PWD_key[i]=j;
j++;
}//取ASCII值在32~126之间的可视字符
iSourceLen=Source.GetLength;
iKeyLen=Key.GetLength();
div_Result=div(iSourceLen,iKeyLen);
if (div_Result.rem)
iCount=div_Result.quot+1;
else
iCount=div_Result.quot;
wsprintf(pKey,”%s“,m_Key);
n=0;
for (i=1;i<=iCount;i++)
{
strTmp=Source.Mid((i-1)*iKeyLen,iKeyLen);
if (strTmp.GetLength()
{
for (j=1;j<=iKeyLen-strTmp.GetLength();j++)
strTmp+=” “;
}
wsprintf(pSource,”%s“,strTmp);
for (j=1;j<=iKeyLen;j++)
{
int k1;
int k2;
k1=PWD_key[pKey[j-1]];
k2=PWD_key[pSource[j-1]];
int k=k1+k2;
div_Result=div(k,ENCRYPT_KEY);
k=div_Result.rem;
pMid[j-1]=k;
strTarget[n++]=k;
}//对源文进行替换加密处理
}
for (j=0;j
{
strTarget[j]+=32;
if (strTarget[j]==32) strTarget[j]=''*''; //用“*”替代密文中的空格
}
strTarget[n]='''';
CString strResult;
strResult.Format(”%s“,strTarget);
return(strResult);
}
注:对D步的数据处理,每人也可以根据自己的具体情况用别的计算方法替换,
二、明键加密算法
明键加密算法可以随意使用加密算法与加密键,但是解密键是保密的。所在,它同时需要两个键,一个用于加密,一个用于解密。而解密键不能从加密键推出的。从而,每个人都可以对源文进行加密操作,但是在没有授权进行解密时,他是不能完成解密工作的,因为他不知道解密键。具体算法如下所述:
A.任意选择两个质数p与q,它们取值最好在100位左右。同时计算r=p*q;
B.任意选择一个整数e,e是与(p-1)*(q-1)互为质数的,e就是算法中的加密键;
C.求解方程式:(d*e) mod ((p-1)*(q-1))=1,d即是加密算法中的解密键;
D.对源文p进行加密即可得到密文,计算公式为c=pe mod r;c即为密文;
E.对密文c进行解密即可得到源文,计算公式为p=cd mod r;p即为源文;
加密算法实现如下:
CString CEncryptDlg::Encrypt_KnownKey(CString Source)
{
int r=ENCRYPT_P*ENCRYPT_Q;
int e=101;
//设置加密键,一般比P与Q大的质数就可以选作加密键
int k=(ENCRYPT_P-1)*(ENCRYPT_Q-1);
int d=5;
//求得解密键,即满足公式:(d*11) mod k=1
char pSource[255];
char pTarget[255];
int iLen;
int i;
DWORD dw1;
wsprintf(pSource,”%s“,m_Source);
iLen=m_Source.GetLength();
for (i=0;i
{
div_t div_Result;
dw1=Exp(pSource[i],e,r);
div_Result=div(dw1,r);
pTarget[i]=div_Result.rem;
//获取密文
}
pTarget[iLen]='''';
CString strTarget;
strTarget.Format(”%s“,pTarget);
return(strTarget);
}
解密算法如下:
CString CEncryptDlg::Decode_KnownKey(CString Source)
{
int r=ENCRYPT_P*ENCRYPT_Q;
int e=101;
//设置加密键,一般比P与Q大的质数就可以选作加密键
int k=(ENCRYPT_P-1)*(ENCRYPT_Q-1);//k=168
int d=5;
//求得解密键,即满足公式:(d*29) mod k=1
int iLen=m_Source.GetLength();
char pSource[255],pTarget[255];
wsprintf(pSource,”%s",m_Source);
for (int i=0;i
{
DWORD dw1;
篇10:电子商务中数据加密技术
随着信息技术和计算机网络技术的发展,从事电子商务活动已引起人们的广泛关注,但网络信息的不安全性,也给电子商务活动带来了很大的威胁,接影响着个人、企业以及国家的经济利益,因此,建立一个安全可靠的电子商务应用环境,已经成为影响到电子商务健康发展的关键性课题。
数据加密技术是有效保护电子商务活动的措施。
一、电子商务交易中的不安全因素
1、信息泄漏:在电子商务中表现为商业机密的泄漏,主要包括两个方面:交易双方进行交易的内容被第三方窃取:交易一方提供给另一方使用的文件被第三方非法使用。
2、篡改:在电子商务中表现为商业信息的真实性和完整性的问题电子的交易信息在网络上传输的过程中。
可能被他人非法修改、删除或重改,这样就使信息失去了真实性和完整性。
3、身份识别:如果不进行身份识别,第三方就有可能假冒交易一方的身份,以破坏交易、破坏被假冒一方的信誉或盗取被假冒一方的交易成果等,进行身份识别后,交易双方就可防止相互猜疑的情况。
4、电脑病毒问题:电脑病毒问世十几年来.各种新型病毒及其变种迅速增加,互联网的出现又为病毒的传播提供了最好的媒介。
不少新病毒直接利用网络作为自己的传播途径,还有众多病毒借助干网络传播得更快,动辄造成数百亿美元的经济损失。
5、黑客问题:随着各种应用工具的传播,黑客己经大众化了,不像过去那样非电脑高手不能成为黑客。
曾经大闹雅虎网站的男孩就没有受过什么专门训练,只是向网友下载了几个攻击软件并学会了如何使用,就在互联网上大干了一场。
二、两种加密体制
1、对称式加密体制
对称式加密就是加密和解密使用同一个密钥。
其优点是具有很高的保密强度和较快的加密和解密速度;其缺点是其密钥必须按照安全途径传送,密钥管理较为困难,它也难以解决数字签名问题。
2、非对称式(公开密钥)加密体制
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必须配对使用,否则不能打开加密文件。
这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人知道。
因为“公钥”是可以公开的,也就不怕别人知道。
收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
非对称式(公开密钥)加密还具备数字签名功能,如常用的RSA算法,其缺点是加密和解密速度较慢。
因此,通常将二者结合起来实现最佳性能,即用非对称式技术在通信双方之间传送对称密钥,而用对称密钥来对实际传输的数据加密、解密。
三、密钥的管理
1、密钥的使用要注意时效和次数
如果用户可以一次又一次地使用同样密钥与别人交换信息,那么密钥也同其它任何密钥一样存在着一定的安全性,虽然说用户的私钥是不对外公开的,但是也很难保证私钥长期的保密性。
如果某人偶然地知道了用户的密钥.那么用户曾经和另一个人交换的每一条消息都不再是保密的了。
另外使用一个特定密钥加密的信息越多,提供给偷听者的材料也就越多.从某种意义上来讲也就越不安全了。
因此,一般强调仅将一个对话密钥用于一条信息或一次对话中,或者建立一种按时更新密钥的机制以减小密钥暴露的可能性。
2、多密钥的管理
假设在某机构有100个人.如果他们任意两人之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢?也许很容易得到案.如果任何两个人之间要不同的密钥,则总共需要4950个密钥,而且每个人要记住99个密钥。
如果机构中的人员增加,则管理密钥将是一件可怕的事情。
Kerberos提供了一种解决方案,它是由mit发明的,使保密密钥的管理和分发变得十分容易,Kerberos建立了一个安全的、可信任的密钥分发中心 ,每个用户只要知道一个和Kde进行会话的密钥就可以了。
而不需要知道成千上万个不同的密钥。
四、数据加密在电子商务中的应用
1、数字证书
数字证书一般包含以下一些内容:证书的版本信息、证书的序列号、每个用户都有一个唯一的证书序列号、证书所使用的签名算法、证书的发行机构名称、证书的有效期、证书所有人的名称、证书所有人的公开密钥、证书发行者对证书的签名等。
数字证书主要是通过非对称加密体制来实现的。
每个用户自己设定一把特定的仅为本人所知的私有密钥。
用它来进行解密和签名,同时设定一把公开密钥并由本人公开,由一组用户所共享,用于加密和验证签名。
当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密。
这样就可以保证信息除发送方和接收方外不被其他人窃取.信息在传输过程中不被篡改,发送方能够通过数字证书来确认接收方的身份,发送方对于自己发送的信息不能抵赖。
2、私钥体制的信息认证
基于秘密密钥体制的信息认证是一种传统的`信息来源认证方法这种认证方法基本原理是,需要通信的甲乙双方共同约定一个口令或一组密码,即建立一个通信双方共享的密钥。
当通信的甲方要发送信息给乙方时,为了防止信息在公共信道被窃取,通信的甲方将信息用共享密钥加密后再传送。
由于密钥是通信双方的共享密钥,通信的乙方可以确定信息是由甲方发出的。
这是一种简单的信息来源的认证方法。
在认证的同时对信息也进行了加密。
3、公开密钥算法身份认证
网络身份认证又叫网络身份鉴别,主要是指在揭示敏感信息或进行事务处理之前对对方身份的确认,即鉴别对方的真实性。
在公开密钥通信方式下,双方都知道对方的加密密钥,这样通信一方可以用另一方的公开密钥EA加密自己的名字和一个随机数.然后发给B,B收到这条消息后,他并不知道这条消息到底是A发的还是C发的,于是他回发一条消息给A,消息的内容包括A的RA、自己的随机数RB、和一个会话密钥Ks。
当A收到B发回的消息后,用自己的私有密钥将它解密,他读到Rs就确定了B的真实身份,因为别人无法知道RA:然后他再发回第三条消息,同意用密钥Ks进行会谈。
当B收到用他刚刚生成的会话密钥加密的Rs后,也就相应地验证了A的身份。
总之,电子商务信息安全性是不容忽视的,通过数据加密技术,加强电子商务活动中的信息安全问题。
参考文献:
[1]邱新建.信息加密技术概论[J].石家庄职业技术学院学报,2004.12.16(6).
[2]祁明.电子商务安全与保密[M].高等教育出版社,2001.7,44―84.







