文档库 最新最全的文档下载
当前位置:文档库 › 封包加密解密

封包加密解密

封包加密解密
封包加密解密

封包加密解密-01

网络游戏客户端与服务器之间需要数据交换处理,数据包通过TCP 网络协议进行传送,这里我们称数据包为封包.之前有教程介绍了如何使用模块中的功能进行封包拦截,修改,替换等功能.本章将完全讲解如何对封包的加密,解密技术.

为什么需要解密封包呢?除非那些封包是明文的(即没有加密处理过),否则就得解密,只有解密出来了数据,才能更清楚的了解游戏是如何交换数据处理,分析出封包数据才能够做出脱机外挂,完全脱离游戏客户端,模拟一个客户端来与游戏服务器连接,做你一切想做的事都没问题.所以封包加密解密技术是脱机外挂的第一前提条件.

即使不做脱机外挂,封包技术仍然比CALL技术更有用处.学过前章后大家应该也知道分析CALL,找CALL,调CALL都不是件容易的事.若能完全解密封包就可以减少或不需要CALL,模拟,内存操作了.

有加密就得有解密,有解密当然要有加密.这是相对立的.对封包数据进行加密与解密的函数过程,称为算法.那封包加密解密技术容易吗?比较讽刺的就是,90%以上的网络游戏的封包都是很容易搞定了.为什么呢?如果算法复杂了的话,会多占CPU性能,而游戏服务器要处理的工作很多,不能把性能全用在加密解密上.举个简单的例子,游戏服务器若同时连接在线的玩家有十万人的话,这些玩家在聊天,打怪,走路等都会产生封包,若算法过于复杂,服务器就很难同时处理得了这么多玩家的封包,何况还得处理数据库中的数据呢.出于服务器的性能考虑,所以若想同时能在线更多玩家,就不能进行复杂的算法来加密封包.不然就得限制减少

能同时在线的玩家,不然游戏服务器会一卡一卡的,导致所有玩家都玩起来.而还有很多的游戏在设计时,为了减少服务器的负担,不但算法简单,还放松了很多的一些数据验证处理.最终漏洞百出,以致于产生了全屏吸怪,穿墙,复制,无敌等等各种变态外挂.

基本上游戏的加密解密算法,都是采用简单的位运算.位就是比特位,简单的说,只是二进制数据运算处理罢了.所以有必要了解一些常见的位运算汇编指令.在汇编那章的指令那节,有过一些指令的介绍,这里再介绍一下几个重中之重的指令.

一.加减指令

加法指令 ADD (ADD Binary Numbers Instruction)

指令的格式:ADD 寄存器/内存地址, 寄存器/内存地址/立即数

受影响的标志位:AF、CF、OF、PF、SF和ZF

指令的功能是把源操作数的值加到目的操作数中。

加1指令 INC (Increment by 1 Instruction)

指令的格式:INC 寄存器/内存地址

受影响的标志位:AF、OF、PF、SF和ZF,不影响CF

指令的功能是把操作数的值加1。

减法指令 SUB (Subtract Binary Values Instruction)

指令的格式:SUB 寄存器/内存地址, 寄存器/内存地址/立即数

受影响的标志位:AF、CF、OF、PF、SF和ZF

指令的功能是从目的操作数中减去源操作数。

减1指令 DEC (Decrement by 1 Instruction)

指令的格式:DEC 寄存器/内存地址

受影响的标志位:AF、OF、PF、SF和ZF,不影响CF

指令的功能是把操作数的值减去1。

二、乘法指令

计算机的乘法指令分为无符号乘法指令和有符号乘法指令,它们的唯一区别就在于:数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。乘法指令的被乘数都是隐含操作数,乘数在指令中显式地写出来。 CPU 会根据乘数是8位、16位,还是32位操作数,来自动选用被乘数: AL 、 AX 或 EAX 。

指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。

无符号数乘法指令 MUL (Unsigned Multiply Instruction) 指令的格式:MUL 寄存器/内存地址

受影响的标志位:CF和OF(AF、PF、SF和ZF无定义)

指令的功能是把显式操作数和隐含操作数(都作为无符号数)相乘,所得的乘积按下表的对应关系存放。

有符号数乘法指令 IMUL (Signed Integer Multiply Instruction) 指令的格式:IMUL寄存器/内存地址—该指令的功能是把显式

操作数和隐含操作数相乘,所得的乘积按表5.2的

对应关系存放。

IMUL寄存器, 立即数—其寄存器必须是16位/32

位通用寄存器,其计算方式为:

寄存器←寄存器×立即数

IMUL寄存器, 寄存器, 立即数—其寄存器只能是

16位通用寄存器,其计算方式为:

寄存器 1 ←寄存器 2 ×立即数或寄存器 1

←内存地址×立即数

IMUL寄存器, 寄存器/内存地址—其寄存器必须是

16位/32位通用寄存器,其计算方式为:

寄存器 1 ←寄存器 1 ×寄存器 2 或寄存器 1

←寄存器 1 ×内存地址

受影响的标志位:CF和OF(AF、PF、SF和ZF无定义) 在指令格式2~4中,各操作数的位数要一致。如果乘积超过目标寄存器所能存储的范围,则系统将置溢出标志OF为1。

三、除法指令

除法指令的被除数是隐含操作数,除数在指令中显式地写出来。 CPU 会根据除数是8位、16位,还是32位,来自动选用被除数 AX 、 DX-AX ,还是 EDX-EAX 。

除法指令功能是用显式操作数去除隐含操作数,可得到商和余数。当除数为0,或商超出数据类型所能表示的范围时,系统会自动产生0号中断。

无符号数除法指令 DIV (Unsigned Divide Instruction) 指令的格式:DIV 寄存器/内存地址

指令的功能是用显式操作数去除隐含操作数(都作为无符号数),所得商和余数按下表的对应关系存放。指令对标志位的影响无定义。

有符号数除法指令 IDIV (Signed Integer Divide Instruction) 指令的格式:IDIV 寄存器/内存地址

受影响的标志位:AF、CF、OF、PF、SF和ZF

指令的功能是用显式操作数去除隐含操作数(都作为有符号数),所得商和余数的对应关系见表。

下面表除法指令除数、被除数、商和余数的对应关系

四、逻辑运算指令

逻辑运算指令是另一组重要的指令,它包括:逻辑与( AND )、逻辑或( OR )、逻辑非( NOT )和异或指令( XOR ),逻辑运算指令也是经常使用的指令。

1、逻辑与操作指令AND(Logical AND Instruction)

指令的格式:AND 寄存器/内存地址, 寄存器/内存地址/立即数

受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

指令的功能:是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。

例已知(BH)=67H,要求把其的第0、1和5位置为0。

解:可以构造一个立即数,其第0、1和5位的值为0,其它位的值为1,该立即数即为:0DCH或11011100B,然后用指令" AND BH, 0DCH "来实现此功能。

只有对应的1和1才等于1.其它全部为0 : 0和1=0 1和0=0 0和0=0

汇编 AND 指令等于易语言里的位与() 和模块里的 AND_() .

2 、逻辑或操作指令OR(Logical OR Instruction)

指令的格式:OR 寄存器/内存地址, 寄存器/内存地址/立即数

受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

指令的功能:是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑"或操作",操作结果存入目标操作数中。

例已知(BL)=46H,要求把其的第1、3、4和6位置为1。

解:构造一个立即数,使其第1、3、4和6位的值为1,其它位的值为0,该立即数即为:5AH或01011010B,然后用指令"OR BL, 5AH"来实现此功能。只有对应的0和0才等于0.其它全部为1 0和1=1 1

和0=1 1和1=1

汇编 OR 指令等于易语言里的位或() 和模块里的 OR_() .

3、逻辑非操作指令NOT(Logical NOT Instruction)

指令的格式:NOT 寄存器/内存地址

其功能:是把操作数中的每位变反,即:1←0,0←1。指令的执行不影响任何标志位。

例已知(AL)=46H,执行指令“NOT AL”后,AL的值是什么?

解:执行该指令后,(AL)=0B9H。该指令只是把二进制位反过来而已

汇编 NOT 指令等于易语言里的位取反() 和模块里的 NOT_() .

4、逻辑异或操作指令XOR(Exclusive OR Instruction)

指令的格式:XOR 寄存器/内存地址, 寄存器/内存地址/立即数

受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

指令的功能:是把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑"异或操作",操作结果存入目标操作数中。

例已知(AH)=46H,要求把其的第0、2、5和7位的二进制值变反。

解:构造一个立即数,使其第0、2、5和7位的值为1,其它位的值为0,该立即数即为:0A5H或10100101B,然后再用指令"XOR AH, 0A5H"来实现此功能。使用XOR运行后,只要对应的位相同时为0 ,0和0=0 1和1=0 对应两位不同时为1 0和1=1 1和0=1

汇编 XOR 指令等于易语言里的位异或() 和模块里的 XOR_() .

五、移位操作指令

移位操作指令是一组经常使用的指令,它包括算术移位、逻辑移位、双精度移位、循环移位和带进位的循环移位等五大类。

移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的值。在8086中,该立即数只能为 1 ,但在其后的 CPU 中,该立即数可以是 1··31 之内的数。

1 、算术移位指令

算术移位指令有:算术左移 SAL (Shift Algebraic Left)和算术右移 SAR (Shift Algebraic Right)。它们的指令格式如下:SAL/SAR 寄存器/内存地址, CL/立即数

受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

算术移位指令的功能描述如下,具体功能下图(a)、(b)所示。

算术左移 SAL 把目的操作数的低位向高位移,空出的低位补0;

算术右移 SAR 把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补。

例已知(AH)=12H,(BL)=0A9H,试给出分别用算术左移和右移指令移动1位后,寄存器AH和BL的内容。

解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如下表所示。

汇编指令 SAL 指令等于易语言里的左移() 和模块里的 SAL_() SHL_().

汇编指令 SAR 指令在易语言里无对应函数等于模块里的 SAR_() 函数.

但要注意模块里的 SAR_() 是以32位整数型来运算的,只等于汇编里的 SAR eax,1 这类的32位寄存器的运行结果,若想以16位或8位来运算,需要先把符号位扩展到32位后再处理.

2、逻辑移位指令

此组指令有:逻辑左移 SHL (Shift Logical Left)和逻辑右移 SHR (Shift Logical Right)。它们的指令格式如下:

SHL/SHR 寄存器/内存地址, CL/立即数

受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。

逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都补 0 。它们的具体功能下图(a)、(b)所示。

例已知(AH)=12H,(BL)=0A9H,试给出分别用逻辑左移和右移指令移动1位后,寄存器AH和BL的内容。

解:用算术左移和右移指令移动1位后,寄存器AH和BL的结果如

下表所示。

汇编SHL 指令等于易语言里的左移() 和模块里的SHL_() SAL_().

汇编 SHR 指令等于易语言里的右移() 和模块里的 SHR_().

3、双精度移位指令

此组指令有:双精度左移SHLD(Shift Left Double)和双精度右移SHRD(Shift Right Double)。它们都是具有三个操作数的指令,其指令的格式如下:

SHLD/SHRD 寄存器/内存地址, 寄存器, CL/立即数;80386+

其中:第一操作数是一个16位/32位的寄存器或存储单元;第二操作数(与前者具有相同位数)一定是寄存器;第三操作数是移动的位数,它可由CL或一个立即数来确定。

在执行SHLD指令时,第一操作数向左移n位,其“空出”的低位由第二操作数的高n位来填补,但第二操作数自己不移动、不改变。

在执行SHRD指令时,第一操作数向右移n位,其“空出”的高位由第二操作数的低n位来填补,但第二操作数自己也不移动、不改变。

SHLD和SHRD指令的移位功能示意图如下图所示。

受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)

下面是几个双精度移位的例子及其执行结果。

汇编 SHLD 与 SHRD 在易语言里暂无对应的函数,2.5模块里也没加上这两个函数.

4、循环移位指令

循环移位指令有:循环左移 ROL (Rotate Left)和循环右移 ROR (Rotate Right)。

指令的格式:ROL/ROR 寄存器/内存地址, CL/立即数

受影响的标志位:CF和OF

循环左移/右移指令只是移位方向不同,它们移出的位不仅要进入CF,而且还要填补空出的位。具体功能如下图(a)、(b)所示。

下面是几个循环移位的例子及其执行结果。

汇编 ROL 在易语言里无对应函数,模块里提供了 ROL_().

汇编 ROR 在易语言里无对应函数,模块里提供了 ROR_().

5、带进位的循环移位指令

带进位的循环移位指令有:带进位的循环左移 RCL (Rotate Left Through Carry)和带进位的循环右移 RCR (Rotate Right)。

指令的格式:RCL/RCR 寄存器/内存地址, CL/立即数

受影响的标志位:CF和OF

带进位的循环左移/右移指令只有移位的方向不同,它们都用原CF 的值填补空出的位,移出的位再进入CF。具体功能如下图(a)、(b)所示。

下面是几个带进位循环移位的例子及其执行结果。

汇编 RCL 在易语言里无对应函数,模块里提供了 RCL_().

汇编 RCR 在易语言里无对应函数,模块里提供了 RCR_().

本文重新介绍了这些将在封包算法里将常用到的汇编指令,大家要尽量记住这些指令的运算方式。最多被用到的指令主要有 XOR-位异或 ,ROL-左循环移位 ,ROR-右循环移位 ,AND-位与 ,OR-位或 ,SHL-左

移 ,SHR-右移 ,NOT-位取反。其它加减乘除,算术移位等用到的机率很少。有些算法指令在易语言里也有对应的函数,或者模块里也有提供了这些功能,不过需要注意的是目前2.5模块里提供的这几个功能是按32位运算的,大家在使用时要注意,有关相应的8位与16位运算的函数下版时会增加上去。

封包加密解密-02

前面我们介绍了最常会被用在封包加密解密算法中的指令,本节开始教大家些入门的知识,如何去分析封包数据。分析封包数据主要分两方面:

一、用肉眼看,再动手写代码测试,对于简单算法的封包还是容易搞定的。

二、动态调试,对于复杂算法的封包就只能这样才能跟踪分析出他的算法。

本章教材会全部都讲解到,当然先介绍第一方式,用肉眼来看,这可是件辛苦的事哟,大家准备好防辐射的眼镜与眼药水吧.可千万别用眼过度,要记得多做做眼保健操哦。

要想用肉眼分析封包,就得要有被加密前的明文内容,与被加密后的封包数据.只有这样才能用眼来看,来分析。如果你只有一段密文而没有对应的明文,就只能扯蛋了。

对于获取加密后的封包很简单,大家完全可以自已用模块里的截包功能来编写个工具出来,也可以找一些现成的封包拦截工具来用,例如老牌的WPE这个软件。

明文包又如何得到呢?比如说我们在游戏里要发言一段文本内容,同时拦截下这段发出的封包,就可以肯定这条包里有包含着某些文本内容了。只需要多截几条不同文本的聊天封包,进行对应就能简单的分析出来相应的明文文本对应被加密后的封包中哪些数据。

下面先来介绍些入门知识

开一个IE浏览器,打开百度网站 https://www.wendangku.net/doc/a99734400.html, 在搜索框输入

42724920 后运行WPE软件,选择IE的进程,点击顺三角按钮开始拦截封包.在百度里点搜索,会被WPE拦载下数据包,点击黑方框的停止按钮,就可以查看被拦截下来的那些数据包了。

找到与IE地址栏里显示的那条封包数据GET /s?wd=42724920这条,在WPE的菜单->文件->另存为->文本文件保存封包数据文本,下面就是

这条封包数据:

16 192.168.1.10 220.181.6.19 429(size) Send(发送)

0000 47 45 54 20 2F 73 3F 77 64 3D 34 32 37 32 34 39 GET /s?wd=427249

0010 32 30 20 48 54 54 50 2F 31 2E 31 0D 0A 41 63 63 20 HTTP/1.1..Acc

0020 65 70 74 3A 20 69 6D 61 67 65 2F 67 69 66 2C 20 ept: image/gif,

0030 69 6D 61 67 65 2F 6A 70 65 67 2C 20 69 6D 61 67 image/jpeg, imag

0040 65 2F 70 6A 70 65 67 2C 20 69 6D 61 67 65 2F 70 e/pjpeg, image/p

0050 6A 70 65 67 2C 20 61 70 70 6C 69 63 61 74 69 6F jpeg, applicatio

0060 6E 2F 78 2D 73 68 6F 63 6B 77 61 76 65 2D 66 6C n/x-shockwave-fl

0070 61 73 68 2C 20 61 70 70 6C 69 63 61 74 69 6F 6E ash, application

0080 2F 76 6E 64 2E 6D 73 2D 65 78 63 65 6C 2C 20 2A /vnd.ms-excel, *

0090 2F 2A 0D 0A 52 65 66 65 72 65 72 3A 20 68 74 74 /*..Referer: htt

00A0 70 3A 2F 2F 77 77 77 2E 62 61 69 64 75 2E 63 6F p://www.baidu.co

00B0 6D 2F 0D 0A 41 63 63 65 70 74 2D 4C 61 6E 67 75 m/..Accept-Langu

00C0 61 67 65 3A 20 7A 68 2D 63 6E 0D 0A 55 73 65 72 age: https://www.wendangku.net/doc/a99734400.html,er

00D0 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C 61 2F -Agent: Mozilla/

00E0 34 2E 30 20 28 63 6F 6D 70 61 74 69 62 6C 65 3B 4.0 (compatible;

00F0 20 4D 53 49 45 20 37 2E 30 3B 20 57 69 6E 64 6F MSIE 7.0; Windo

0100 77 73 20 4E 54 20 35 2E 31 3B 20 54 72 69 64 65 ws NT 5.1; Tride

0110 6E 74 2F 34 2E 30 29 0D 0A 41 63 63 65 70 74 2D nt/4.0)..Accept-

0120 45 6E 63 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 20 Encoding: gzip,

0130 64 65 66 6C 61 74 65 0D 0A 48 6F 73 74 3A 20 77 deflate..Host: w

0140 77 77 2E 62 61 69 64 75 2E 63 6F 6D 0D 0A 43 6F https://www.wendangku.net/doc/a99734400.html,..Co

0150 6E 6E 65 63 74 69 6F 6E 3A 20 4B 65 65 70 2D 41 nnection: Keep-A

0160 6C 69 76 65 0D 0A 43 6F 6F 6B 69 65 3A 20 42 41 live..Cookie: BA

0170 49 44 55 49 44 3D 42 42 35 46 34 46 39 43 34 35 IDUID=BB5F4F9C45

0180 34 31 38 30 43 35 33 31 31 44 35 38 44 45 43 45 4180C5311D58DECE

0190 33 30 32 36 45 46 3A 46 47 3D 31 3B 20 42 44 5F 3026EF:FG=1; BD_

01A0 55 54 4B 5F 44 56 54 3D 31 0D 0A0D 0A UTK_DVT=1....

在WPE里拦截下来的封包,左中右分三列,第一列无意义,第二列是封包数据的十六进制文本,第三列是字符串文本。很多新人总爱抓着第三列的文本数据不放,事实上我要严肃的告诉你,第三列的文本数据,如果是明文的情况下可以做为参考用,否则第三列数据是没有多少意义的,为什么呢?因为第三列只能显示可视的字符,对于非可视的字符统统用 "." 这个点号来表示,这对于我们要进行解密封包是没有作用的,例如图上的红色十六进制数据 0D 0A 正是文本里的换行符号,在第三列中无法显示换行,全用点号来代表了。

封包的正文就是这些十六进制的文本数据了,但你也不能抓着十六进制就不放了,要知道,封包都应该用十进制的字节集来表示,但由于十进制从0到255间小则一个字,多则三个字,如果直接显示就会一团糟,所以绝大多数的截包类软件,都会把封包数据在三个字符的十六进制来显示,这样就能工工整整的排列起来了。于是你恍然大悟,原来只要把这段十六进制的数据解密就行了哇!但我要提醒你又透逗了一次,这段十六进制的封包根本就不需要解密,分析封包的最终结果不就是我们得编写与封包有关的功能吗?在截包功能里截到的就是字节集数据,不是十六进制的,如果是明文的话直接用到文本(字节集封包) 就能显示出来了,所以用WPE截下的包,顶多只是把十六进制转回成十进制的字节集即可,这个过程算不上加密解密。所以像上面的十六进制的封包数据,只需要用模

块里的十六进制到字节集() 就能转换过来了。

字节集封包=十六进制到字节集("47 45 54 20 2F 73 3F 77 64 3D 34 32 37 32 34 39 32 30 20 48 54 54 50 2F 31 2E 31 0D 0A 41 63 63"," ")输出调试文本(到文本(字节集封包))

上面说的是明文包,明文包自然是无需解密,下面再用WPE拦截在百度里搜“外挂作坊”看看会截到什么样的包?

13 192.168.1.10 220.181.6.19 445 Send

0000 47 45 54 20 2F 73 3F 77 64 3D 25 43 44 25 45 32 GET /s?wd=??

0010 25 42 39 25 44 32 25 44 37 25 46 37 25 42 37 25 ????%

0020 42 42 20 48 54 54 50 2F 31 2E 31 0D 0A 41 63 63 BB HTTP/1.1..Acc

0030 65 70 74 3A 20 69 6D 61 67 65 2F 67 69 66 2C 20 ept: image/gif,

0040 69 6D 61 67 65 2F 6A 70 65 67 2C 20 69 6D 61 67 image/jpeg, imag

0050 65 2F 70 6A 70 65 67 2C 20 69 6D 61 67 65 2F 70 e/pjpeg, image/p

0060 6A 70 65 67 2C 20 61 70 70 6C 69 63 61 74 69 6F jpeg, applicatio

0070 6E 2F 78 2D 73 68 6F 63 6B 77 61 76 65 2D 66 6C n/x-shockwave-fl

0080 61 73 68 2C 20 61 70 70 6C 69 63 61 74 69 6F 6E ash, application

0090 2F 76 6E 64 2E 6D 73 2D 65 78 63 65 6C 2C 20 2A /vnd.ms-excel, *

00A0 2F 2A 0D 0A 52 65 66 65 72 65 72 3A 20 68 74 74 /*..Referer: htt

00B0 70 3A 2F 2F 77 77 77 2E 62 61 69 64 75 2E 63 6F p://www.baidu.co

00C0 6D 2F 0D 0A 41 63 63 65 70 74 2D 4C 61 6E 67 75 m/..Accept-Langu

00D0 61 67 65 3A 20 7A 68 2D 63 6E 0D 0A 55 73 65 72 age: https://www.wendangku.net/doc/a99734400.html,er

00E0 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C 61 2F -Agent: Mozilla/

00F0 34 2E 30 20 28 63 6F 6D 70 61 74 69 62 6C 65 3B 4.0 (compatible;

0100 20 4D 53 49 45 20 37 2E 30 3B 20 57 69 6E 64 6F MSIE 7.0; Windo

0110 77 73 20 4E 54 20 35 2E 31 3B 20 54 72 69 64 65 ws NT 5.1; Tride

0120 6E 74 2F 34 2E 30 29 0D 0A 41 63 63 65 70 74 2D nt/4.0)..Accept-

0130 45 6E 63 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 20 Encoding: gzip,

0140 64 65 66 6C 61 74 65 0D 0A 48 6F 73 74 3A 20 77 deflate..Host: w

0150 77 77 2E 62 61 69 64 75 2E 63 6F 6D 0D 0A 43 6F https://www.wendangku.net/doc/a99734400.html,..Co

0160 6E 6E 65 63 74 69 6F 6E 3A 20 4B 65 65 70 2D 41 nnection: Keep-A

0170 6C 69 76 65 0D 0A 43 6F 6F 6B 69 65 3A 20 42 41 live..Cookie: BA

0180 49 44 55 49 44 3D 42 42 35 46 34 46 39 43 34 35 IDUID=BB5F4F9C45

0190 34 31 38 30 43 35 33 31 31 44 35 38 44 45 43 45 4180C5311D58DECE

01A0 33 30 32 36 45 46 3A 46 47 3D 31 3B 20 42 44 5F 3026EF:FG=1; BD_

01B0 55 54 4B 5F 44 56 54 3D 31 0D 0A 0D 0A UTK_DVT=1....

通过前一次的包我们知道在 GET /s?wd= 后面的内容是我们输入在百度搜索框中的文本,但这条包里的结果却不一样,明明我们输入的是

“外挂作坊”但这里居然是?????也不知道是什么的玩意,所以可以肯定,原明文内容“外挂作坊”被某种算法给编码处理过了,因为算法简单所以称为编码,复杂的叫加密,好像没人这么明确的定义过吧,不管他叫编码还是叫加密都无所谓了,重要的是我们如何自已也能写出来这样的算法。

尽管之前说过,要分析封包还是得用那段十六进制的数据,但这里的第三列字符串文本内容仍然极据参考意义,看这段被处理过的红色文本内容,感觉像是十六进制的格式.去掉%分号就是 CD E2 B9 D2 D7 F7 B7 BB 正好八对,外挂作坊四个字刚好也是8字节的长度,即然怀疑他看起来像是被转十六进制的,咱只需要试试看就知道了。

输入调试文本 (字节集到十六进制 (到字节集 (“外挂作坊”), “”)) 输出调试文本 (到文本 (十六进制到字节集 (“CD E2 B9 D2 D7 F7 B7 BB”, “”)))

* CD E2 B9 D2 D7 F7 B7 BB

* 外挂作坊

测试结果真是这样的,由此可见网页的URL中若含有一些特殊字符或中文等时,需要转为十六进制文本,对于转为十六进制后的数据还加上 % 百分号,来说明后面的是16进制数据。

上面介绍了用WPE截包,说了封包应该是十进制的字节集格式,但为了工整显示,所以用十六进制来输出,并且还提供了字符串供参考,但字符串是无法正确显示一些特殊字符的,

下面再介绍一点基础知识,这是前段时间有一个会员向我求助时的

记录,以此为例:

这个会员遇到了这个问题,明文文本 218.60.134.170 被加密成了

3A3930263E3826393B3C26393F38 加密后的文本数据咋看都像是16进制的处理,但是不对.因为若把这段明文转成真正的十六进制,与被加密的十六进制总是有8的相差结果.于是他便顺理成章的认为这只是在不同的时候采用+或-进行运算后再转为十六进制的。

老实说,他的想法确实没错.但这似乎不好控制,得知道一个值在多少或啥条件时才会用加还是用减呢?或许可以试试用别的方式来计算看看。

2 1 8 . 6 0 . 1

3

4 . 1 7 0

3A 39 30 26 3E 38 26 39 3B 3C 26 39 3F 38

通过上面的明文与密文对应的关系来看,明文字符 "1" 总是等于 0x39 这个规律,可以肯定这个算法方式是按一个固定的方法来运算的,并且是一个一个字节来处理.第一个字节的运算结果不会影响到第二字节的处

理,下面我们把这一切都转为十进制字节集来再分析。

输出调试文本 (字节集到十进制 (到字节集 (“218.60.134.170”), “,”))

输出调试文本 (字节集到十进制 (十六进制到字节集 (“3A 39 30 26 3E 38 26 39 3B 3C 26 39 3F 38”, “”))) * 50,49,56,46,54,48,46,49,51,52,46,49,55,48

* 58,57,48,38,62,56,38,57,59,60,38,57,63,56

明文与密文的对照结果,确实都相差着8,那么在这都相差8的背后有没有其它什么玄机呢?如果不是采用加减乘除的方式,那就该是位运算或密码表了,对于密码表以后再介绍。如果想知道是不是通过位运算,那就得转换成二进制才能更直观的分析:

明文=00110010 00110001 00111000 00101110 00110110 00110000 00101110 00110001 00110011 00110100 00101110 00110001 00110111 00110000

密文=00111010 00111001 00110000 00100110 00111110 00111000 00100110 00111001 00111011 00111100 00100110 00111001 00111111 00111000

8=00111010 因为明文跟密文之间总是相差8,所以我们要重点看看这

简单讲解加密技术

简单讲解加密技术 加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。 加密技术包括两个元素:算法和密钥。算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解密的一种算法。在安全保密中,可通过适当的钥加密技术和管理机制来保证网络的信息通信安全。 什么是加密技术呢?加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。密钥加密技术的密码体制分为对称密钥体制和非对称密钥体制两种。相应地,对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以数据加密标准(DES,Data Enc ryption Standard)算法为典型代表,非对称加密通常以RSA(Rivest Shamir Ad 1eman)算法为代表。对称加密的加密密钥和解密密钥相同,而非对称加密的加密密钥和解密密钥不同,加密密钥可以公开而解密密钥需要保密。 加密技术的种类:对称加密(私人密钥加密),非对称加密(公开密钥加密),单项加密。 对称加密:对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DNS的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。 对称加密的种类:DES(数据加密的标准)使用56位的密钥。AES:高级加密标准。3 DES:三圈加密标准它作为现在加密算法的标准。 非对称加密:即公钥加密,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对

汇编加密解密

目录 一.设计目标及目的 (3) 1.1主界面 (3) 1.2设计要求 (3) 1.3菜单栏说明 (4) 1.4显示目录下的文件 (4) 1.5加密文件 (5) 1.6原文件与加密文件 (5) 参考文献: (6) 1.7系统结构设计 (7) 二.设计的意义及代码 (7) 2.1 小结 (7) 2.2 程序代码 (8) 三.实验心得 (14)

一.设计目标及目的 功能: 1、按指定文件名读取文件。 2、使用算法对读取的文件进行加密。 3、加密文件写入磁盘。 设计目的: 1、学生增进对汇编语言的认识,加强用汇编语言编程的能力。 2、使学生了解和掌握汇编语言程序设计过程、方法及其实现,为以后微机原理课程的学习打下良好基础。 3、进一步掌握屏幕输出显示的设计方法。 1.1主界面 程序运行主界面如图所示。 1.2设计要求 1、巩固和加深学生对汇编语言课程基本知识的理解和掌握。 2、学会查阅和汇编语言相关的规范、手册等技术资料。 3、能正确地绘制和使用程序流程图。

1.3菜单栏说明 d显示当前目录文件名 t显示文件内容(提示:filename:键入文件全名,若该文件不存在,则提示:file not found!;若该文件存在,显示该文件内容。) s加密文件内容(提示:键入文件全名,若该文件不存在,则提示:error!若该文件存在,则提示键入加密或解密的KEY,KEY为小于等于255) 注:加密解密使用同一方法,且文件加密后会自动退出菜单! q退出主菜单。 1.4显示目录下的文件

1.5加密文件 1.6原文件与加密文件原文件: 加密后:

参考文献: 沈美明等《IBM-PC汇编语言程序设计》清华大学出版社,2001.8第二版沈美明《IBM-PC汇编语言程序设计实验教程》清华大学出版社,1992.9第一版 杨路明汇编语言程序设计中南大学出版社出版 杨秀文80x86汇编语言程序设计教程清华大学出版社 《微型计算机原理及应用》第四版周明德清华大学出版社

RSA加密算法加密与解密过程解析

RSA加密算法加密与解密过程解析 1.加密算法概述 加密算法根据内容是否可以还原分为可逆加密和非可逆加密。 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。 解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。 非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。 此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA 算法是1977年发明的,全称是RSA Public Key System,这个Public Key 就是指的公共密钥。 2.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q。 令k=?(n)=(p?1)(q?1),原理见4的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程 同样以一个字符串来进行举例,例如要对字符串the art of programming 进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。 1. 首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。 2. 对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。 3. 解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。 4. 根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。 4.RSA加密算法原理解析 下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。 欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。 首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。?(n)=总数(从1到n?1,与n互质整数) 比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2

RSA加密解密的设计与实现

RSA加密解密的设计与实现

上海电力学院 《应用密码学》课程设计 题目: RSA加密解密的设计与实现 院系:计算机科学与技术学院 专业年级:级 学生姓名:李正熹学号: 3273 指导教师:田秀霞 1月 8日 目录

目录 1.设计要求 2.开发环境与工具 3.设计原理(算法工作原理) 4.系统功能描述与软件模块划分 5.设计核心代码 6.参考文献 7. 设计结果及验证 8. 软件使用说明 9. 设计体会 附录 1.设计要求

1 随机搜索大素数,随机生成公钥和私钥 2 用公钥对任意长度的明文加密 3 用私钥对密文解密 4 界面简洁、交互操作性强 2.开发环境与工具 Windows XP操作系统 Microsoft Visual C++ 6.0 1.创立rsa工程

2.在rsa工程中创立 3273 李正熹cpp文件 3.设计原理 RSA算法简介 公开密码算法与其它密码学完全不同,它是基于数学函数而不是基于替换或置换。与使用一个密钥的对称算法不同,公开密钥算法是非对称的,而且它使用的是两个密钥,包括用于加密的公钥和用于解密的私钥。公开密钥算法有RSA、Elgamal等。 RSA公钥密码算法是由美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在1978年提出来的,并以她们的名字的有字母命名的。RSA是第一个安全、实用的公钥密码算法,已经成为公钥密码的国际标准,是当前应用广泛的公钥密码体制。

RSA的基础是数论的Euler定理,其安全性基于二大整数因子分解问题的困难性,公私钥是一对大素数的函数。而且该算法已经经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这不恰恰说明该算法有其一定的可信度。 4.系统功能描述与软件模块划分 功能:

DES加密算法与解密(带流程图)

一、DES加密及解密算法程序源代码: #include usingnamespacestd; conststaticcharIP_Table[]={//IP_Table置换 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6, 64,56,48,40,32,24,16,8, 57,49,41,33,25,17,9,1, 59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5, 63,55,47,39,31,23,15,7 }; conststaticcharFinal_Table[]={ //最终置换40,8,48,16,56,24,64,32, 39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30, 37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28, 35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26, 33,1,41,9,49,17,57,25 }; conststaticcharS_Box[8][64]={ //s_box /*S1*/

0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}, /*S2*/ {15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}, /*S3*/ {10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}, /*S4*/ {7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}, /*S5*/ {2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}, /*S6*/ {12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,

加密技术及密码破解实验报告

第九章、实验报告 实验一、设置Windows启动密码 一、实验目的:利用Windows启动密码保存重要文件。 二、实验步骤: 1、在Windows XP系统中选择开始——运行,在打开输入框中“syskey.exe”,点击确定,打开“保证Windows XP账户数据库的安全”对话框。 2、单击【更新】,打开【启动密码】对话框,然后输入密码,在【确认】文本框中再次输入密码,单击【确定】

实验二、为word文档加密解密 一、实验目的:保护数据的安全 二、实验步骤: 1、打开一个需要加密的文档,选择【工具】——【选项】——【安全性】然后输入想要设置打开文件时所需的密码 2、单击【高级(A)】打开加密类型对话框,选中【加密文档属性】复选框,单击【确定】。

3、打开文件的【确认密码】对话框,输入打开文件时需要的密码,单击【确定】,随即打开【确认密码】对话框,输入密码。 4、保存文件后,重新打开Word文档,打开【密码】,输入打开文件所需的密码,单击【确定】输入修改的密码,单击【确定】 破解word密码 (1)安装Advanced Office Password Recovery软件,安装完成后打开需要破解的word 文档,进行暴力破解,结果如图所示: 实验三、使用WinRAR加密解密文件

一.实验目的:加密文件,保证文件的安全性。 二.实验步骤: 1、在需要加密的文件夹上右击,选中【添加到压缩文件】打开【压缩文件名和参数】 2、选中【压缩文件格式】组合框中的【RAR】并在【压缩选项】中选中【压缩后删除源文件】然后切换到【高级】,输入密码,确认密码。 3、关闭对话框,单击确定,压缩完成后,双击压缩文件,系统打开【输入密码对话框】 破解WinRAR加密的文件 (1)安装Advanced RAR Password Recovery软件,打开WinRAR加密文件,进行暴力破解,获得密码。结果如图:

加密解密软件的设计与实现

课程设计任务书 2010—2011学年第二学期 专业:计算机科学与技术学号:080101010 姓名:刘海坤 课程设计名称:计算机网络课程设计 设计题目:加密解密软件的设计与实现 完成期限:自2011 年 6 月21 日至2011 年 6 月26 日共 1 周 设计目的: 本程序设计所采用的就是DES算法,同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。 功能要求:根据DES算法,设计加密解密软件来为各种文件加密解密。 一、设计的任务:根据设计整体需求,本人负责窗体的设计与实现和目标文件 的导入模块。 二、进度安排: 三、主要参考资料: [1] 谢希仁.计算机网络教程.北京: 人民邮电出版社,2006. [2] 耿祥义.Java2使用教程:清华大学出版社,2006. [3] 方敏,张彤.网络应用程序设计.西安:电子科技大学出版社,2005. [4] 黄超.Windows下的网络编程.北京:人民邮电出版社,2003. 指导教师(签字):教研室主任(签字): 批准日期:年月日

摘要 随着计算机的应用和网络技术的不断发展,网络间的通讯量不断的加大,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。本程序设计对文件的加密使用的是DES加密算法。 DES是分块加密的。DES用软件进行解码需要用很长时间,而用硬件解码速度非常快,1977年,人们估计要耗资两千万美元才能建成一个专门计算机用于DES的解密,而且需要12个小时的破解才能得到结果。所以,当时DES被认为是一种十分强壮的加密方法。但今天,只需二十万美元就可以制造一台破译DES的特殊的计算机,所以现在 DES 对要求“强壮”加密的场合已经不再适用了。 Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。利用Java语言中秘密密钥工厂对DES算法的支持,使程序实现文件加密、解密两大功能更简单。 本程序设计所采用的就是DES算法。同时利用Java的GUI编程,生成文本对话框,对文件的路径进行选择、提供密钥框、加密和解密按钮。 使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。 关键词:JA V A ,DES,加密,解密。

set加解密过程

3.4.5 SE丁协议的加解密过程 1。加密过程 首先,甲方要产生一个数字签名来向乙方证明信息确实是他发出的。他需要执行以 下步骤: ①将所发送信息通过哈希算法,形成信息摘要。 ②使用RSA算法,用私人签名密钥加密信息摘要,形成数字签名。 其次,甲方需要加密信息,使得它在网上传输时没有人能读懂它。 ③甲方通过软件,随机生成对称密钥,作大信息量加密之用,SET缺省的对称密钥 算法是DES o ④甲方用对称密钥加密所要发送的信息(即明文)、数字签名和证书。发送证书的目 的是为了乙方可从证书中得到公开签名密钥,以解开甲方的数字签名。 ⑥到目前为止,甲方可安全地发送信息了,同时也证明了他的身份。但为了使乙方 能读懂这些信息,甲方还需将对称密钥送给乙方。甲方用乙方的公开密钥加密该对称密钥,形成所谓的数字信封。最后甲方将数字信封和加密信息一同发给乙方。 2.解密过程 ①乙方用自己的私人密钥交换密钥将数字信封打开,取出对称密钥。 ②乙方用对称密钥解密信息,得到明文信息、数字签名和甲方的公开签名密钥(从 甲方的证书中获得)。 ③乙方用甲方的公开签名密钥解密数字签名,得到信息摘要。 3.验证过程 到目前为止,乙方还不知道收到的信息是否确实来自甲方,为了证实是甲方发送的信息,乙方还要完成以下步骤: ①将得到的明文信息进行哈希运算,得到新的信息摘要。 ②比较新的信息摘要和原信息摘要(上述解密过程中得到的),如果两者一致,说明 收到的信息确实来自拥有与证书中公开签名密钥成对的私人签名密钥一方,而且信息是完整的。一旦乙方将证书送到发证机构CA认证,就可确定甲方的真实身份和证书是否有效。 3.4.6 SE丁协议分析 SET是基于信用卡的安全支付协议,用于保证信息的机密性、交易方身份的认证和信息的完整性。 (1)信息的机密性 在SET协议中,传输的信息都进行了加密处理,以保证信息的机密性。DES中SET 协议中默认的对称加密算法,用于保护敏感的金融数据;商用数据隐蔽设备CDMF(Commercial Data Mashing Facility)是另一种对称加密算法,用于SET中收单行和持卡者的信息保护它以DES为底层加密算法,采用40位密钥代替DES的64位密钥。为了保证信用卡信息不被商家非法获取,SET采用双重数据签名技术,以提供订购信息和支付消息的机密性,使商家只能看到订购信息,不能看到用户的信用卡信息,而银行只能看到信用卡信息,不能看到订购信息。 (2)数据的完整性 SET使用数字签名来保证数据的完整性。SET使用安全Hash算法SHA-1( Secure Hash Algorithm -1)及RSA来实现数字签名。SHA-1对于任意长度的消息都生成一个160位的消息摘要。如果消息中有一位发生变化,则消息摘要中的数据也会发生变化,两个不同的消息的摘要完全相同的概率几乎是零。 SET协议中还应用双重签名来保证信息的完整性。双重签名的目的是连接两个不同

几种常用的数据加密技术

《Network Security Technology》Experiment Guide Encryption Algorithm Lecture Code: 011184 Experiment Title:加密算法 KeyWords:MD5, PGP, RSA Lecturer:Dong Wang Time:Week 04 Location:Training Building 401 Teaching Audience:09Net1&2 October 10, 2011

实验目的: 1,通过对MD5加密和破解工具的使用,掌握MD5算法的作用并了解其安全性; 2,通过对PGP加密系统的使用,掌握PGP加密算法的作用并了解其安全性; 3,对比MD5和PGP两种加密算法,了解它们的优缺点,并总结对比方法。 实验环境: 2k3一台,XP一台,确保相互ping通; 实验工具:MD5V erify, MD5Crack, RSA-Tools,PGP8.1 MD5加密算法介绍 当前广泛存在有两种加密方式,单向加密和双向加密。双向加密是加密算法中最常用的,它将明文数据加密为密文数据,可以使用一定的算法将密文解密为明文。双向加密适合于隐秘通讯,比如,我们在网上购物的时候,需要向网站提交信用卡密码,我们当然不希望我们的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,我们希望我们的信用卡密码是通过加密以后,再在网络传送,这样,网站接受到我们的数据以后,通过解密算法就可以得到准确的信用卡账号。 单向加密刚好相反,只能对数据进行加密,也就是说,没有办法对加密以后的数据进行解密。这有什么用处?在实际中的一个应用就是数据库中的用户信息加密,当用户创建一个新的账号或者密码,他的信息不是直接保存到数据库,而是经过一次加密以后再保存,这样,即使这些信息被泄露,也不能立即理解这些信息的真正含义。 MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果我们加密特定的数据,得到的密文一定是相同的。不可恢复性是MD5算法的最大特点。 实验步骤- MD5加密与破解: 1,运行MD5Verify.exe,输入加密内容‘姓名(英字)’,生成MD5密文;

实验四RSA加解密算法的实现

实验四 RSA加解密算法的实现 一.实验目的 1、对算法描述可进行充分理解,精确理解算法的各个步骤。 2、完成RSA软件算法的详细设计。 3、用C++完成算法的设计模块。 4、编制测试代码。 二.实验内容 1.实验原理及基本技术路线图(方框原理图) 加密过程: 第一步,用户首先输入两个素数p和q,并求出 n = p*q,然后再求出n的欧拉函数值phi。 第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d ≡1(mod phi),求出e的乘法逆元。至此我们已经得到了公开密钥{e,n}和秘密密钥{d,n}。 第三步,让用户输入要进行加密的小于n一组正整数(个数不超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。 第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。 注意:此处不能用m2[j] = clear[j] ^ e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。 第五步,输出加密后的密文。 解密过程: 第一步,根据在以上算法中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下: 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。

2.所用仪器、材料(设备名称、型号、规格等) 计算机一台、vc6.0 3.实验方法、步骤 #include #include using namespace std; #define MAXLENGTH 500 //明文最大长度,即所允许最大整数个数 int size = 0;//保存要进行加密的正整数的个数 int p, q; //两个大素数 int n, phi; //n = p * q,phi = (p-1) * (q-1) 是n的欧拉函数值 int e; //{e, n}为公开密钥 int d; //{d, n}为秘密密钥 int clear[MAXLENGTH], Ciphertext[MAXLENGTH];//分别用于存放加//密前的明//文和加密后的密文int DecryptionText[MAXLENGTH];//存放解密后的明文 //////////////////////////////////////////////////////////// //以下为加密算法 void Encryption() {//加密算法 cout << " 请输入两个较大的素数:" ; cin >> p >> q ; cout << " p = " << p << ", q = " << q << endl; n = p * q;//求解 n, phi = (p - 1) * ( q - 1 );//求解 n 的欧拉函数值 cout << " n = " << n << ", phi = " << phi << endl; cout << " 请从[0," << phi - 1 << "]中选择一个与 " << phi << " 互素的数 e:"; cin >> e; float d0; for( int i = 1; ; i++) {///求解乘法逆元 e * d ≡ 1 (mod phi) d0 = (float)(phi*i+1) / e; if( d0 - (int)d0 == 0 ) break; } d = (int)d0; cout << endl; cout << " e = " << e << ", d = " << d << endl; cout << " 公开密钥 Pk = {e,n} = {" << e << "," << n << "}" << endl; cout << " 秘密密钥 Sk = {d,n} = {" << d << "," << n << "}" << endl; cout << endl;

AES算法加解密原理及安全性分析

AES算法加解密原理及安全性分析 刘帅卿 一、AES算法简介 AES算法是高级加密标准算法的简称,其英文名称为Advanced Encryption Standard。该加密标准的出现是因为随着对称密码的发展,以前使用的DES(Data Encryption Standard数据加密标准)算法由于密钥长度较小(56位),已经不适应当今数据加密安全性的要求,因此后来由Joan Daeman和Vincent Rijmen提交的Rijndael算法被提议为AES的最终算法。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations)和替换(substitutions)输入数据。加之算法本身复杂的加密过程使得该算法成为数据加密领域的主流。 二、AES算法的基本概念 1、有限域(GF) 由于AES算法中的所有运算都是在有限域当中进行的,所以在理解和实现该算法之前先得打好有限域这一基石才行。通常的数学运算都是在实数域中进行,而AES算法则是在有限域中进行,我们可以将有限域看成是有确定边界范围的正整数集合,在该集合当中,任意两个元素之间的运算结果都仍然落在该集合当中,也即满足运算封闭性。 那么如何才能保证这样的“有限性”(也即封闭性)呢? GF(2w)被称之为伽罗华域,是有限域的典型代表。随着w(=4,8,16,…)的取值不同所形成的有限域范围也不同。AES算法中引入了GF域当中对数学运算的基本定义:将两数的加减法定义为两者的异或运算;将两数的乘法定义为多

数据加密技术分析及应用_郭敏杰

第21卷第5期2005年10月 赤峰学院学报(自然科学版) Journal of Chifeng College(Natural Science Edition) Vol.21No.5 Oct.2005数据加密技术分析及应用 郭敏杰 (内蒙古伊泰丹龙药业有限责任公司,内蒙古 赤峰 024000) 摘 要:数据加密技术是实现网络安全的关键技术之一.本文系统地介绍了当前广泛使用的几种数据加密技术:对称密钥加密、公开密钥加密以及混合式加密,对它们进行了客观上的分析并介绍了在网络及其他方面的应用状况. 关键词:数据加密;密钥;网络安全 中图分类号:TP309.7文献标识码:A文章编号:1673-260X(2005)05-0041-01 伴随微机的发展与应用,数据的安全越来越受到高度的重视.数据加密技术就是用来保证信息安全的基本技术之一.数据加密实质是一种数据形式的变换,把数据和信息(称为明文)变换成难以识别和理解的密文并进行传输,同时在接收方进行相应的逆变换(称为解密),从密文中还原出明文,以供本地的信息处理系统使用.加密和解密过程组成为加密系统,明文和密文统称为报文. 1 对称密钥加密算法 对称式密钥加密技术是指加密和解密均采用同一把秘密钥匙,而且通信双方必须都要获得这把钥匙,并保持钥匙的秘密.当给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密. 对称密钥加密有许多种算法,但所有这些算法都有一个共同的目的———以可还原的方式将明文(未加密的数据)转换为暗文.暗文使用加密密钥编码,对于没有解密密钥的任何人来说它都是没有意义的.由于对称密钥加密在加密和解密时使用相同的密钥,所以这种加密过程的安全性取决于是否有未经授权的人获得了对称密钥.这就是它为什么也叫做机密密钥加密的原因.希望使用对称密钥加密通信的双方,在交换加密数据之前必须先安全地交换密钥. 加密算法中最简单的一种就是“置换表”算法,这种算法也能很好达到加密的需要.每一个数据段(总是一个字节)对应着“置换表”中的一个偏移量,偏移量所对应的值就输出成为加密后的文件.加密程序和解密程序都需要一个这样的“置换表”.事实上,80×86cpu系列就有一个指令`xlat'在硬件级来完成这样的工作.这种加密算法比较简单,加密解密速度都很快,但是一旦这个“置换表”被对方获得,那这个加密方案就完全被识破了.更进一步讲,这种加密算法对于黑客破译来讲是相当直接的,只要找到一个“置换表”就可以了.这种方法在计算机出现之前就己经被广泛的使用. 对这种“置换表”方式的一个改进就是使用2个或者更多的“置换表”,这些表都是基于数据流中字节的位置的,或者基于数据流本身.这时,破译变的更加困难,因为黑客必须正确地做几次变换.通过使用更多的“置换表”,并且按伪随机的方式使用每个表,这种改进的加密方法已经变的很难破译. 2 基于公钥的加密算法 基于公钥的加密算法有两种方式:对称密钥算法和非对称密钥算法.所谓对称密钥加密方法中,对信息的加密和解密都使用相同的密钥,或者可以从一个密钥推导出另一个密钥,而且通信双方都要获得密钥并保持密钥的秘密.当需要对方发送信息时,用自己的加密密钥进行加密,而在接受方收到数据后,用对方所给的密钥进行解密. 非对称密钥算法就是加密解密使用不同的密钥.这种算法的基本原理是利用两个很大的质数相乘所产生的乘积来加密,这两个质数无论哪个先与原文件编码相乘、对文件加密,均可由另一个质数再相乘来解密,但要用一个质数来求出另一个质数则是十分困难的. 非常著名的pgp公钥加密以及rsa加密方法都是非对称加密算法. 3 对称密钥和公钥相结合的加密技术 根据对称密钥和公钥加密特点,在实际应用中将二者相结合,即使用DES/IDE A和RSA结合使用.首先发信者使用DES/IDEA算法用对称钥将明文原信息加密获得密文,然后使用接受的RSA公开钥将对称钥加密获得加密的DES或IDE A密钥,将密文和密钥一起通过网络传送给接收者.接受方接受到密文信息后,先用自己的密钥解密而获得DES或IDEA密钥,再用这个密钥将密文解密而后获得明文原信息.由此起到了对明文信息保密作用. 4 加密技术的应用及发展 随着网络互联技术的发展,信息安全必须系统地从体系结构上加以考虑.ORI(开放系统互联)参考模型的七 (下转第44页) · 41 · DOI:10.13398/https://www.wendangku.net/doc/a99734400.html, ki.issn1673-260x.2005.05.024

RSA加密算法的基本原理

RSA加密算法的基本原理 1978年RSA加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,

RSA加解密算法C语言的实现

#include #include #include #include #include #include #define MAX 100 #define LEN sizeof(struct slink) void sub(int a[MAX],int b[MAX] ,int c[MAX] ); struct slink { int bignum[MAX]; /*bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/ struct slink *next; }; /*/--------------------------------------自己建立的大数运算库-------------------------------------*/ void print( int a[MAX] ) { int i; for(i=0;il2) return 1; if (l1=0;i--) { if (a1[i]>a2[i]) return 1 ; if (a1[i]

rsa算法对字符串的加密解密

#include #include /*类型定义*/ typedef long int li_ELEMTYPE; typedef int i_ELEMTYPE; typedef char c_ELEMTYPE; /*宏定义*/ #define TEXT_MAX_NUM 20 #define RSA_ENCODE_TEXT "xidianuniversity" /*RSA编解码函数*/ /* 输入输出说明:r = a^b mod c 编码1.a-------原始加密明文数据 2.b-------加密指数(p-1)(q-1) 3.c-------p*q 4.r-------加密后密文数据 解码1.a-------原始解密密文数据 2.b-------解密指数d 3.c-------p*q 4.r-------解密后明文数据 */ li_ELEMTYPE Rsa_un_enCode(li_ELEMTYPE a,li_ELEMTYPE b,li_ELEMTYPE c) { li_ELEMTYPE r = 1; b = b + 1; while(b != 1) { r = r * a; r = r % c; b--; } return r; } /*main主函数*/ int main(int argc, char **argv) { li_ELEMTYPE p,q,e,d,n,t; i_ELEMTYPE i = 0; i_ELEMTYPE acSecret_Text[TEXT_MAX_NUM]; c_ELEMTYPE acPublic_Text[TEXT_MAX_NUM]; memset(acSecret_Text, 0, sizeof(acSecret_Text));

十分钟读懂加密技术----对称加密技术

十分钟读懂加密技术(一)----对称加密技术 加密技术包括加密和解密两个运算过程。加密是指将特定可读的信息或数据(明文)转化为不可读的内容(密文)的过程,这个过程一般需要算法和密钥两个元素,具体过程对于不同的加密技术来说有所不同。解密是加密过程的逆运算,是将不可读的密文恢复为明文的过程,这个过程也需要密钥的参与。加密技术依据加密过程和解密过程使用的密钥是否一致可以分为两类:对称加密和非对称加密,也称私钥加密和公钥加密。本文主要介绍对称加密技术。 一、对称加密技术的原理 对称加密(私钥加密),顾名思义,即加密和解密两个过程使用的密钥相同。双方(或多方)使用相同的密钥来对需要传递的信息或数据进行加密或解密以构建一个信息通道从而达到交流传输的目的。 如下图所示,如果Alice想要通过互联网发送信息给Bob,但是又怀疑互联网不是一个安全的信息通道,很可能存在第三方恶意机构会拦截她发送的信息。利用对称加密技术,Alice可以用她事先和Bob商量好的密钥先对要发送的消息进行加密,把消息转化为不可读的密文,再将密文通过互联网发送给Bob。这样即使被第三方拦截,得到的也只是密文,难以解读Alice原本要发送的消息。在Bob接收到密文后,再使用与Alice一致的密钥对密文进行解密,将密文恢复到明文。而当Bob想发送消息给Alice时,他的做法也是一样。在这个消息传递中,只要恶意机构无法得到Alice和Bob使用的密钥,那么便无法轻松地对密文进行解密,这种加密技术就是安全的。

图1 对称加密技术 二、早期的对称加密技术 早期的加密技术都是对称加密技术,最早1可以追溯到古希腊时期斯巴达城使用的斯巴达密码棒(Scytale )2。到了古罗马时期,出现了非常著名的凯撒密码(CaesarCipher )。 斯巴达密码棒是古希腊时期斯巴达城邦主要运用的一种加密工具。其原理是利用木棍对信息字母进行简单地位移,只有将写有信息的长条皮革缠绕在特定直径的木棍上时,才能阅读出信件的真实信息,否则只是一堆无意义的字母组合。 凯撒密码与斯巴达密码棒的原理基本相同,也是对原信息进行简单的数位偏移,将明文转化为密文的加密方式。比如偏移数位是3,那么字母A 就被替换为字母D ,以此类推。这种加密方式据说最早是用于凯撒和将军之间的交流。 1有关于密码学的历史发展,参见Kahn D 在1996年出版的“The Codebreakers ”。该书全面介绍了从4000年前到20世纪有关密码学的重大发展事件。 2 Kelly T. The myth of the skytale[J]. Cryptologia, 1998, 22(3):244-260. 加密 解密 Key Alice Bob 737909666C0288596DBF116 A10DDF14ACE3078D70F7134 E325EFBC497272F6BA

密码学-RSA加密解密算法的实现课程设计报告

密码学课程报告《RSA加密解密算法》 专业:信息工程(信息安全) 班级:1132102 学号:201130210214 姓名:周林 指导老师:阳红星 时间:2014年1月10号

一、课程设计的目的 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 二、RSA算法的编程思路 1.确定密钥的宽度。 2.随机选择两个不同的素数p与q,它们的宽度是密钥宽度的1/2。 3.计算出p和q的乘积n 。 4.在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e 用做加密密钥(其中Φ(n)=(p-1)*(q-1))。 5.从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。 6.得公钥(e ,n ), 私钥 (d , n) 。 7.公开公钥,但不公开私钥。 8.将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9.将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 三、程序实现流程图: 1、密钥产生模块:

相关文档
相关文档 最新文档