首页
社区
课程
招聘
问一个算法的问题,我没有见过这种对称算法!
2005-2-11 00:36 8238

问一个算法的问题,我没有见过这种对称算法!

2005-2-11 00:36
8238
算法是这样的:
首先,根据KEY生成一张256的表记作TAB1,每个元素都是WORD类型的,然后在他后面生成一个0000~0x00ff的表记做TAB2.
然后对TAB1的数据进行排序,就是把数据进行从小到大的排序,并且用TAB2来记录TAB1排序交换的顺序,接着把TAB1初始化成一个0000~0x00ff的表,然后把TAB2的表按照从小到大的顺序进行排序,用TAB1来记录交换的顺序.
这样就生成了TAB1,然后就可以用这张表对明文进行加密了,加密算法就是利用明文的ASCII码作为表的索引取值形成密文.密文同样可以利用这张表还原成原来的数据.

KEY生成的TAB1:
00179808  66 34 2F 59 0B 6C 3E 6B FD 53 A6 7D 2C 50 87 38  f4/Y l>k??,P?
00179818  60 34 0D 64 8A 65 F4 00 C7 1A 07 66 4E 63 D7 12  `4.d???fNc?
00179828  D4 00 02 29 3B 62 B6 48 80 28 5E 32 41 30 94 5E  ?);b度?^2A0?
00179838  56 2C D1 06 4F 02 72 2C DF 5F 0A 59 6A 78 16 6A  V,?Or,哌.Yjxj
00179848  5D 14 94 0B FC 27 0B 60 BB 15 FE 09 6E 20 E9 29  ]?? `??n ?
00179858  C5 73 39 3D F8 1D D7 6D 95 6B 41 1F B8 5E 4D 2D  朋9=?醉?A皋M-
00179868  4D 05 FF 31 02 4E 1F 13 0C 3A 6F 5D F8 79 B7 62  M?N.:o]?封
00179878  1A 36 FE 78 5A 07 A1 6C 66 0B 36 04 9F 17 4E 2C  6?Z§f 6?N,
00179888  33 68 9C 52 44 55 11 73 0E 26 D9 2E 64 1A 6E 44  3h?DUs&?dnD
00179898  03 45 19 39 89 65 94 47 10 27 B1 04 C2 10 28 72  E9??'??(r
001798A8  DA 1F 04 39 F5 7E 44 50 9F 2C A7 39 77 33 C0 0D  ?9觜DP??w3?
001798B8  6C 68 C3 19 DA 07 B0 24 90 10 BB 5E 06 74 2D 55  lh????晦t-U
001798C8  50 2D 0F 56 8B 1C 59 4A DC 32 81 02 36 1B 9D 10  P-V?YJ??6?
001798D8  82 2E 76 64 E3 35 35 41 22 54 9E 21 91 77 EF 06  ?vd?5A"T???
001798E8  E2 7F D7 4F BC 5F 2F 60 22 00 4F 67 E7 1B 37 42  ?紫歼/`".Og?7B
001798F8  B3 3B E9 1F 78 7F A5 01 43 08 E3 3D C8 2D 3D 24  ??x?C??=$
00179908  1C 45 B5 11 7B 2A E9 7F 0F 0E 3C 2F 0D 44 FE 4A  E?{*?</.D?
00179918  AA 1A 17 20 AE 0C C1 01 B2 1D 52 15 50 55 2A 45  ? ???RPU*E
00179928  CD 38 41 5C FE 5E E8 16 7E 58 AF 1A 6F 36 A4 16  ?A\??~X?o6?
00179938  56 0C 39 16 DB 6D 8A 24 69 2F F4 0A 0D 29 06 0D  V.9垌?i/?.).
00179948  00 75 56 55 BA 2F CB 21 8D 2D 53 73 11 7A 1A 64  .uVU???Sszd
00179958  E4 57 C6 20 93 6B 41 24 A7 52 13 13 25 30 62 3A  渥??A$б%0b:
00179968  02 42 0A 18 63 6F 75 3C 99 7D 0F 1C 38 4A 90 55  B.cou<?8J?
00179978  BF 1A 78 5B AB 56 66 22 E9 66 37 43 FC 0D 0F 37  ?x[?f"殒7C?7
00179988  62 66 B9 44 F0 60 07 32 40 2B 0E 21 69 66 78 00  bf鼓疣2@+!ifx.
00179998  96 18 49 6F 39 58 BC 37 EB 65 2A 62 38 52 1D 28  ?Io9X?脲*b8R(
001799A8  EB 76 FA 10 95 07 E0 0C 5D 5B B7 47 69 62 83 7D  膂???][非ib?
001799B8  55 0B 71 22 92 41 42 04 AB 33 F4 77 BE 48 E0 7D  U q"?B?赭救帻
001799C8  AB 26 A7 57 C6 76 A3 26 0E 45 B4 1E 3E 76 A1 78  ?ё砌?E?>v▲
001799D8  2A 73 69 68 4A 5C 3A 3F 65 6E DF 5D B2 49 E6 03  *sihJ\:?en咻采?
001799E8  EF 16 D9 28 39 22 31 38 B1 01 EE 0D 2B 4E 03 41  ??9"18??+NA
001799F8  80 66 EB 71 36 3A 25 47 97 3E 73 4E 7A 09 01 71  ?腭6:%G?sNz.q

用来记录交换顺序的TAB2
00179A08  00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00  .........
00179A18  08 00 09 00 0A 00 0B 00 0C 00 0D 00 0E 00 0F 00  ..... .......
00179A28  10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00  ........
00179A38  18 00 19 00 1A 00 1B 00 1C 00 1D 00 1E 00 1F 00  ........
00179A48  20 00 21 00 22 00 23 00 24 00 25 00 26 00 27 00   .!.".#.$.%.&.'.
00179A58  28 00 29 00 2A 00 2B 00 2C 00 2D 00 2E 00 2F 00  (.).*.+.,.-.../.
00179A68  30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00  0.1.2.3.4.5.6.7.
00179A78  38 00 39 00 3A 00 3B 00 3C 00 3D 00 3E 00 3F 00  8.9.:.;.<.=.>.?.
00179A88  40 00 41 00 42 00 43 00 44 00 45 00 46 00 47 00  @.A.B.C.D.E.F.G.
00179A98  48 00 49 00 4A 00 4B 00 4C 00 4D 00 4E 00 4F 00  H.I.J.K.L.M.N.O.
00179AA8  50 00 51 00 52 00 53 00 54 00 55 00 56 00 57 00  P.Q.R.S.T.U.V.W.
00179AB8  58 00 59 00 5A 00 5B 00 5C 00 5D 00 5E 00 5F 00  X.Y.Z.[.\.].^._.
00179AC8  60 00 61 00 62 00 63 00 64 00 65 00 66 00 67 00  `.a.b.c.d.e.f.g.
00179AD8  68 00 69 00 6A 00 6B 00 6C 00 6D 00 6E 00 6F 00  h.i.j.k.l.m.n.o.
00179AE8  70 00 71 00 72 00 73 00 74 00 75 00 76 00 77 00  p.q.r.s.t.u.v.w.
00179AF8  78 00 79 00 7A 00 7B 00 7C 00 7D 00 7E 00 7F 00  x.y.z.{.|.}.~..
00179B08  80 00 81 00 82 00 83 00 84 00 85 00 86 00 87 00  ????????
00179B18  88 00 89 00 8A 00 8B 00 8C 00 8D 00 8E 00 8F 00  ????????
00179B28  90 00 91 00 92 00 93 00 94 00 95 00 96 00 97 00  ????????
00179B38  98 00 99 00 9A 00 9B 00 9C 00 9D 00 9E 00 9F 00  ????????
00179B48  A0 00 A1 00 A2 00 A3 00 A4 00 A5 00 A6 00 A7 00  ????????
00179B58  A8 00 A9 00 AA 00 AB 00 AC 00 AD 00 AE 00 AF 00  ????????
00179B68  B0 00 B1 00 B2 00 B3 00 B4 00 B5 00 B6 00 B7 00  ????????
00179B78  B8 00 B9 00 BA 00 BB 00 BC 00 BD 00 BE 00 BF 00  ????????
00179B88  C0 00 C1 00 C2 00 C3 00 C4 00 C5 00 C6 00 C7 00  ????????
00179B98  C8 00 C9 00 CA 00 CB 00 CC 00 CD 00 CE 00 CF 00  ????????
00179BA8  D0 00 D1 00 D2 00 D3 00 D4 00 D5 00 D6 00 D7 00  ????????
00179BB8  D8 00 D9 00 DA 00 DB 00 DC 00 DD 00 DE 00 DF 00  ????????
00179BC8  E0 00 E1 00 E2 00 E3 00 E4 00 E5 00 E6 00 E7 00  ????????
00179BD8  E8 00 E9 00 EA 00 EB 00 EC 00 ED 00 EE 00 EF 00  ????????
00179BE8  F0 00 F1 00 F2 00 F3 00 F4 00 F5 00 F6 00 F7 00  ????????
00179BF8  F8 00 F9 00 FA 00 FB 00 FC 00 FD 00 FE 00 FF 00  ????????

交换之后的TAB2在经过排序,TAB1就记录成了下面的表:
00179808  74 00 B6 00 DE 00 DB 00 A8 00 FA 00 A3 00 7B 00  t.??????{.
00179818  73 00 CB 00 CF 00 03 00 39 00 D1 00 CA 00 27 00  s.??.9.??'.
00179828  02 00 59 00 C7 00 99 00 57 00 6F 00 6C 00 BD 00  .Y.??W.o.l.?
00179838  5F 00 0E 00 07 00 60 00 C2 00 B5 00 F3 00 DA 00  _...`.????
00179848  2A 00 19 00 55 00 C3 00 2C 00 15 00 45 00 5B 00  *..U.?,..E.[.
00179858  EB 00 85 00 3F 00 E0 00 DD 00 41 00 BE 00 62 00  ???.??A.?b.
00179868  0D 00 6D 00 9F 00 29 00 80 00 BB 00 F6 00 C9 00  ..m.?).????
00179878  76 00 F5 00 10 00 DF 00 18 00 0A 00 31 00 5E 00  v.?.?...1.^.
00179888  D7 00 A6 00 AB 00 E8 00 51 00 67 00 35 00 90 00  ????Q.g.5.?
00179898  92 00 7E 00 CE 00 97 00 54 00 0C 00 24 00 E7 00  ?~.??T...$.?
001798A8  42 00 7D 00 FC 00 A4 00 61 00 7F 00 71 00 1E 00  B.}.??a..q..
001798B8  D9 00 34 00 12 00 50 00 22 00 BF 00 EC 00 AA 00  ?4..P.".???
001798C8  63 00 AF 00 3D 00 9D 00 70 00 08 00 3A 00 23 00  c.?=.?p..:.#.
001798D8  66 00 CD 00 75 00 8A 00 A9 00 48 00 F1 00 0F 00  f.?u.??H.?.
001798E8  FE 00 A2 00 C1 00 C4 00 00 00 D6 00 3B 00 8D 00  ????..?;.?
001798F8  83 00 43 00 FD 00 04 00 13 00 86 00 65 00 4D 00  ?C.?..?e.M.
00179908  94 00 26 00 5C 00 FF 00 21 00 68 00 8F 00 9E 00  ?&.\.?!.h.??
00179918  36 00 44 00 1B 00 06 00 3E 00 2B 00 AC 00 95 00  6.D...>.+.??
00179928  7C 00 B9 00 C0 00 2F 00 B4 00 37 00 77 00 2E 00  |.??/.?7.w...
00179938  1A 00 2D 00 E1 00 4F 00 69 00 16 00 5A 00 1D 00  .-.?O.i..Z..
00179948  ED 00 AD 00 6A 00 49 00 64 00 EA 00 F7 00 CC 00  ??j.I.d.???
00179958  B2 00 46 00 DC 00 4E 00 A7 00 28 00 6B 00 82 00  ?F.?N.?(.k.?
00179968  8C 00 32 00 E4 00 84 00 F9 00 3C 00 9C 00 AE 00  ?2.???<.??
00179978  38 00 B8 00 B0 00 4B 00 D5 00 8E 00 20 00 78 00  8.??K.?? .x.
00179988  D2 00 91 00 C5 00 6E 00 5D 00 47 00 D3 00 01 00  ???n.].G.?.
00179998  33 00 E3 00 B3 00 79 00 D0 00 C6 00 A5 00 56 00  3.??y.???V.
001799A8  F0 00 25 00 11 00 1C 00 B7 00 98 00 C8 00 F8 00  ?%...????
001799B8  17 00 4C 00 8B 00 0B 00 72 00 F2 00 9A 00 FB 00  .L.? .r.???
001799C8  53 00 B1 00 EF 00 52 00 93 00 40 00 EE 00 F4 00  S.??R.?@.??
001799D8  E9 00 D8 00 BA 00 88 00 E2 00 BC 00 9B 00 09 00  ???????..

这个就是查表加密和解密的过程:
.text:00406025 loc_406025:                             ; CODE XREF: sub_405F62+D2j
.text:00406025                 movzx   eax, byte ptr [esi]
.text:00406028                 mov     al, [ebx+eax*2]
.text:0040602B                 stosb
.text:0040602C                 inc     esi
.text:0040602D                 dec     [ebp+arg_4]
.text:00406030
.text:00406030 loc_406030:                             ; CODE XREF: sub_405F62+C1j
.text:00406030                 cmp     [ebp+arg_4], 0
.text:00406034                 jnz     short loc_406025

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
免费 0
打赏
分享
最新回复 (17)
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2005-2-11 09:41
2
0
按你的叙述,这应该是用key生成密表的单表代替密码
安全性应该不高
所以,不太可能是某种公开算法

请你加密下列信息,给我们看看结果

abcdefghiabcdefghi
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-11 09:57
3
0
就是简单的生成一个不重复的表!然后排序(从小到大),用另一个有顺序的数组记录排序交换的过程!然后在重复一次!就生成了一个记录之后的表用来作替换!
0012F360  30 30 33 31 35 66 66 38 30 30 30 30 30 31 66 38  00315ff8000001f8
0012F370  30 30 33 31 35 46 46 38 30 30 30 30 30 31 46 38  00315FF8000001F8
0012F380  30 33 32 33 35 38 33 32 30 30 30 30 30 35 30 34  0323583200000504

用上面的KEY生成数据表1:
00179850    3CF8   5F00   1BFF   3729   7CE4   7CF9   041A   2705
00179860    6A0D   5F8D   3D73   39FF   4D4D   557D   1FD5   5C89
00179870    45E5   1357   16A2   714A   7D6E   679E   1469   4663
00179880    5812   7A25   64BB   6FF6   74FB   1ABC   503B   2BE9
00179890    130C   630E   46F5   32E7   2DCF   2FCA   04F1   1AA8
001798A0    66AF   3501   6507   2D73   0E68   31D0   55F4   5AE1
001798B0    62BB   073E   25AE   25E3   5466   3667   16F5   3406
001798C0    6953   09DB   752B   61F6   0F10   6E41   1A65   0141
001798D0    717F   3E40   1BC2   235E   29CF   059F   0FFC   15EE
001798E0    59AA   7FAA   243C   7441   06B0   54D8   7333   721C
001798F0    4A25   5BAC   5266   43BA   28E6   60D9   09C9   4710
00179900    27A2   3AA9   2990   5256   6F46   2B9F   7242   4BC2
00179910    15B9   585C   030F   6E97   5ECA   54BF   4263   615E
00179920    0967   0C50   34BB   0173   7D0F   09DF   35B8   07C4
00179930    6B89   6268   4771   6AD6   3AD7   473A   6C0E   2209
00179940    4B66   0358   3D93   2E1C   6E87   6820   37F9   0AF3
00179950    2123   6D2A   6983   6E98   5EA9   0773   7D4F   7981
00179960    204C   7BBB   542C   3C11   5C6C   302B   1FAB   3560
00179970    1A51   413B   3379   2F3F   6E1F   5DD3   00EB   1B77
00179980    7106   2EB0   70DB   5652   09BA   4D0A   0FB3   725D
00179990    1923   0C74   3FC7   716B   5F55   1C03   65E8   0EDD
001799A0    2CC2   42B2   4435   7F21   33AE   3B05   7735   4879
001799B0    0DE4   71ED   4923   18FE   4AA8   2CEC   4F89   3DE4
001799C0    18EC   5B79   0711   1FFF   61C7   17A6   6197   6986
001799D0    6722   1A00   7A82   3918   3AB5   24B7   6555   05FC
001799E0    2132   29FF   4A81   19AD   35BF   31B5   467E   4296
001799F0    61AA   4246   3F19   241A   7C58   50CD   2310   47D7
00179A00    277F   7C7B   47DC   3B95   193C   59CE   0BF8   5889
00179A10    4D97   125D   7BA5   6EB0   47D6   28BF   7766   5402
00179A20    4E68   30B6   4EBC   3986   2F83   5BAD   593F   150B
00179A30    540E   5003   409B   5319   79BD   0AA7   2BD9   6527
00179A40    587E   7EE5   2FE0   000E   3714   687F   293B   1EBE
有顺序的数据表2:
00179A50    0000   0001   0002   0003   0004   0005   0006   0007
00179A60    0008   0009   000A   000B   000C   000D   000E   000F
00179A70    0010   0011   0012   0013   0014   0015   0016   0017
00179A80    0018   0019   001A   001B   001C   001D   001E   001F
00179A90    0020   0021   0022   0023   0024   0025   0026   0027
00179AA0    0028   0029   002A   002B   002C   002D   002E   002F
00179AB0    0030   0031   0032   0033   0034   0035   0036   0037
00179AC0    0038   0039   003A   003B   003C   003D   003E   003F
00179AD0    0040   0041   0042   0043   0044   0045   0046   0047
00179AE0    0048   0049   004A   004B   004C   004D   004E   004F
00179AF0    0050   0051   0052   0053   0054   0055   0056   0057
00179B00    0058   0059   005A   005B   005C   005D   005E   005F
00179B10    0060   0061   0062   0063   0064   0065   0066   0067
00179B20    0068   0069   006A   006B   006C   006D   006E   006F
00179B30    0070   0071   0072   0073   0074   0075   0076   0077
00179B40    0078   0079   007A   007B   007C   007D   007E   007F
00179B50    0080   0081   0082   0083   0084   0085   0086   0087
00179B60    0088   0089   008A   008B   008C   008D   008E   008F
00179B70    0090   0091   0092   0093   0094   0095   0096   0097
00179B80    0098   0099   009A   009B   009C   009D   009E   009F
00179B90    00A0   00A1   00A2   00A3   00A4   00A5   00A6   00A7
00179BA0    00A8   00A9   00AA   00AB   00AC   00AD   00AE   00AF
00179BB0    00B0   00B1   00B2   00B3   00B4   00B5   00B6   00B7
00179BC0    00B8   00B9   00BA   00BB   00BC   00BD   00BE   00BF
00179BD0    00C0   00C1   00C2   00C3   00C4   00C5   00C6   00C7
00179BE0    00C8   00C9   00CA   00CB   00CC   00CD   00CE   00CF
00179BF0    00D0   00D1   00D2   00D3   00D4   00D5   00D6   00D7
00179C00    00D8   00D9   00DA   00DB   00DC   00DD   00DE   00DF
00179C10    00E0   00E1   00E2   00E3   00E4   00E5   00E6   00E7
00179C20    00E8   00E9   00EA   00EB   00EC   00ED   00EE   00EF
00179C30    00F0   00F1   00F2   00F3   00F4   00F5   00F6   00F7
00179C40    00F8   00F9   00FA   00FB   00FC   00FD   00FE   00FF
-----------------------------------------------------------------
对数组1进行排序同时用数组2记录交换过程:
00179850    000E   00EB   0141   0173   030F   0358   041A   04F1
00179860    059F   05FC   06B0   0711   073E   0773   07C4   0967
00179870    09BA   09C9   09DB   09DF   0AA7   0AF3   0BF8   0C50
00179880    0C74   0DE4   0E68   0EDD   0F10   0FB3   0FFC   125D
00179890    130C   1357   1469   150B   15B9   15EE   16A2   16F5
001798A0    17A6   18EC   18FE   1923   193C   19AD   1A00   1A51
001798B0    1A65   1AA8   1ABC   1B77   1BC2   1BFF   1C03   1EBE
001798C0    1FAB   1FD5   1FFF   204C   2123   2132   2209   2310
001798D0    235E   241A   243C   24B7   25AE   25E3   2705   277F
001798E0    27A2   28BF   28E6   293B   2990   29CF   29FF   2B9F
001798F0    2BD9   2BE9   2CC2   2CEC   2D73   2DCF   2E1C   2EB0
00179900    2F3F   2F83   2FCA   2FE0   302B   30B6   31B5   31D0
00179910    32E7   3379   33AE   3406   34BB   3501   3560   35B8
00179920    35BF   3667   3714   3729   37F9   3918   3986   39FF
00179930    3AA9   3AB5   3AD7   3B05   3B95   3C11   3CF8   3D73
00179940    3D93   3DE4   3E40   3F19   3FC7   409B   413B   4246
00179950    4263   4296   42B2   43BA   4435   45E5   4663   467E
00179960    46F5   4710   473A   4771   47D6   47D7   47DC   4879
00179970    4923   4A25   4A81   4AA8   4B66   4BC2   4D0A   4D4D
00179980    4D97   4E68   4EBC   4F89   5003   503B   50CD   5256
00179990    5266   5319   5402   540E   542C   5466   54BF   54D8
001799A0    557D   55F4   5652   5812   585C   587E   5889   593F
001799B0    59AA   59CE   5AE1   5B79   5BAC   5BAD   5C6C   5C89
001799C0    5DD3   5EA9   5ECA   5F00   5F55   5F8D   60D9   615E
001799D0    6197   61AA   61C7   61F6   6268   62BB   630E   64BB
001799E0    6507   6527   6555   65E8   66AF   6722   679E   6820
001799F0    687F   6953   6983   6986   6A0D   6AD6   6B89   6C0E
00179A00    6D2A   6E1F   6E41   6E87   6E97   6E98   6EB0   6F46
00179A10    6FF6   70DB   7106   714A   716B   717F   71ED   721C
00179A20    7242   725D   7333   7441   74FB   752B   7735   7766
00179A30    7981   79BD   7A25   7A82   7BA5   7BBB   7C58   7C7B
00179A40    7CE4   7CF9   7D0F   7D4F   7D6E   7EE5   7F21   7FAA

00179A50    00FB   0096   003F   006B   0062   0079   0006   0026
00179A60    0045   00C7   004C   00BA   0031   0085   006F   0068
00179A70    009C   0056   0039   006D   00F5   007F   00DE   0069
00179A80    00A1   00B0   002C   00A7   003C   009E   0046   00E1
00179A90    0020   0011   0016   00EF   0060   0047   0012   0036
00179AA0    00BD   00B8   00B3   00A0   00DC   00CB   00C1   0090
00179AB0    003E   0027   001D   0097   0042   0002   00A5   00FF
00179AC0    008E   000E   00BB   0088   0080   00C8   0077   00D6
00179AD0    0043   00D3   004A   00C5   0032   0033   0007   00D8
00179AE0    0058   00E5   0054   00FE   005A   0044   00C9   005D
00179AF0    00F6   001F   00A8   00B5   002B   0024   007B   0099
00179B00    0093   00EC   0025   00FA   008D   00E9   00CD   002D
00179B10    0023   0092   00AC   0037   006A   0029   008F   006E
00179B20    00CC   0035   00FC   0003   007E   00C3   00EB   000B
00179B30    0059   00C4   0074   00AD   00DB   008B   0000   000A
00179B40    007A   00B7   0041   00D2   00A2   00F2   0091   00D1
00179B50    0066   00CF   00A9   0053   00AA   0010   0017   00CE
00179B60    0022   0057   0075   0072   00E4   00D7   00DA   00AF
00179B70    00B2   0050   00CA   00B4   0078   005F   009D   000C
00179B80    00E0   00E8   00EA   00B6   00F1   001E   00D5   005B
00179B90    0052   00F3   00E7   00F0   008A   0034   0065   004D
00179BA0    000D   002E   009B   0018   0061   00F8   00DF   00EE
00179BB0    0048   00DD   002F   00B9   0051   00ED   008C   000F
00179BC0    0095   0084   0064   0001   00A4   0009   0055   0067
00179BD0    00BE   00D0   00BC   003B   0071   0030   0021   001A
00179BE0    002A   00F7   00C6   00A6   0028   00C0   0015   007D
00179BF0    00FD   0038   0082   00BF   0008   0073   0070   0076
00179C00    0081   0094   003D   007C   0063   0083   00E3   005C
00179C10    001B   009A   0098   0013   00A3   0040   00B1   004F
00179C20    005E   009F   004E   004B   001C   003A   00AE   00E6
00179C30    0087   00F4   0019   00C2   00E2   0089   00D4   00D9
00179C40    0004   0005   006C   0086   0014   00F9   00AB   0049
00179C50    ABAB   ABAB   ABAB   ABAB   0000   0000   0000   0000
00179C60    0074   0083   1400   FEEE   0518   0014   0518   0014
-----------------------------------------------------------------
初始化数组1
00179850    0000   0001   0002   0003   0004   0005   0006   0007
00179860    0008   0009   000A   000B   000C   000D   000E   000F
00179870    0010   0011   0012   0013   0014   0015   0016   0017
00179880    0018   0019   001A   001B   001C   001D   001E   001F
00179890    0020   0021   0022   0023   0024   0025   0026   0027
001798A0    0028   0029   002A   002B   002C   002D   002E   002F
001798B0    0030   0031   0032   0033   0034   0035   0036   0037
001798C0    0038   0039   003A   003B   003C   003D   003E   003F
001798D0    0040   0041   0042   0043   0044   0045   0046   0047
001798E0    0048   0049   004A   004B   004C   004D   004E   004F
001798F0    0050   0051   0052   0053   0054   0055   0056   0057
00179900    0058   0059   005A   005B   005C   005D   005E   005F
00179910    0060   0061   0062   0063   0064   0065   0066   0067
00179920    0068   0069   006A   006B   006C   006D   006E   006F
00179930    0070   0071   0072   0073   0074   0075   0076   0077
00179940    0078   0079   007A   007B   007C   007D   007E   007F
00179950    0080   0081   0082   0083   0084   0085   0086   0087
00179960    0088   0089   008A   008B   008C   008D   008E   008F
00179970    0090   0091   0092   0093   0094   0095   0096   0097
00179980    0098   0099   009A   009B   009C   009D   009E   009F
00179990    00A0   00A1   00A2   00A3   00A4   00A5   00A6   00A7
001799A0    00A8   00A9   00AA   00AB   00AC   00AD   00AE   00AF
001799B0    00B0   00B1   00B2   00B3   00B4   00B5   00B6   00B7
001799C0    00B8   00B9   00BA   00BB   00BC   00BD   00BE   00BF
001799D0    00C0   00C1   00C2   00C3   00C4   00C5   00C6   00C7
001799E0    00C8   00C9   00CA   00CB   00CC   00CD   00CE   00CF
001799F0    00D0   00D1   00D2   00D3   00D4   00D5   00D6   00D7
00179A00    00D8   00D9   00DA   00DB   00DC   00DD   00DE   00DF
00179A10    00E0   00E1   00E2   00E3   00E4   00E5   00E6   00E7
00179A20    00E8   00E9   00EA   00EB   00EC   00ED   00EE   00EF
00179A30    00F0   00F1   00F2   00F3   00F4   00F5   00F6   00F7
00179A40    00F8   00F9   00FA   00FB   00FC   00FD   00FE   00FF

00179A50    00FB   0096   003F   006B   0062   0079   0006   0026
00179A60    0045   00C7   004C   00BA   0031   0085   006F   0068
00179A70    009C   0056   0039   006D   00F5   007F   00DE   0069
00179A80    00A1   00B0   002C   00A7   003C   009E   0046   00E1
00179A90    0020   0011   0016   00EF   0060   0047   0012   0036
00179AA0    00BD   00B8   00B3   00A0   00DC   00CB   00C1   0090
00179AB0    003E   0027   001D   0097   0042   0002   00A5   00FF
00179AC0    008E   000E   00BB   0088   0080   00C8   0077   00D6
00179AD0    0043   00D3   004A   00C5   0032   0033   0007   00D8
00179AE0    0058   00E5   0054   00FE   005A   0044   00C9   005D
00179AF0    00F6   001F   00A8   00B5   002B   0024   007B   0099
00179B00    0093   00EC   0025   00FA   008D   00E9   00CD   002D
00179B10    0023   0092   00AC   0037   006A   0029   008F   006E
00179B20    00CC   0035   00FC   0003   007E   00C3   00EB   000B
00179B30    0059   00C4   0074   00AD   00DB   008B   0000   000A
00179B40    007A   00B7   0041   00D2   00A2   00F2   0091   00D1
00179B50    0066   00CF   00A9   0053   00AA   0010   0017   00CE
00179B60    0022   0057   0075   0072   00E4   00D7   00DA   00AF
00179B70    00B2   0050   00CA   00B4   0078   005F   009D   000C
00179B80    00E0   00E8   00EA   00B6   00F1   001E   00D5   005B
00179B90    0052   00F3   00E7   00F0   008A   0034   0065   004D
00179BA0    000D   002E   009B   0018   0061   00F8   00DF   00EE
00179BB0    0048   00DD   002F   00B9   0051   00ED   008C   000F
00179BC0    0095   0084   0064   0001   00A4   0009   0055   0067
00179BD0    00BE   00D0   00BC   003B   0071   0030   0021   001A
00179BE0    002A   00F7   00C6   00A6   0028   00C0   0015   007D
00179BF0    00FD   0038   0082   00BF   0008   0073   0070   0076
00179C00    0081   0094   003D   007C   0063   0083   00E3   005C
00179C10    001B   009A   0098   0013   00A3   0040   00B1   004F
00179C20    005E   009F   004E   004B   001C   003A   00AE   00E6
00179C30    0087   00F4   0019   00C2   00E2   0089   00D4   00D9
00179C40    0004   0005   006C   0086   0014   00F9   00AB   0049
00179C50    ABAB   ABAB   ABAB   ABAB   0000   0000   0000   0000
00179C60    0074   0083   1400   FEEE   0518   0014   0518   0014
-----------------------------------------------------------------
对数组2进行排序同时用数组1记录交换过程:
00179850    0076   00BB   0035   006B   00F8   00F9   0006   0046
00179860    00D4   00BD   0077   006F   0097   00A8   0039   00B7
00179870    0085   0021   0026   00E3   00FC   00CE   0022   0086
00179880    00AB   00F2   00C7   00E0   00EC   0032   009D   0051
00179890    0020   00C6   0088   0060   0055   005A   0007   0031
001798A0    00CC   0065   00C8   0054   001A   005F   00A9   00B2
001798B0    00C5   000C   0044   0045   00A5   0069   0027   0063
001798C0    00D1   0012   00ED   00C3   001C   00DA   0030   0002
001798D0    00E5   007A   0034   0040   004D   0008   001E   0025
001798E0    00B0   00FF   0042   00EB   000A   00A7   00EA   00E7
001798F0    0091   00B4   00A0   0083   004A   00BE   0011   0089
00179900    0048   0070   004C   009F   00DF   004F   00E8   0095
00179910    0024   00AC   0004   00DC   00BA   00A6   0080   00BF
00179920    000F   0017   0064   0003   00FA   0013   0067   000E
00179930    00D6   00C4   008B   00D5   0072   008A   00D7   003E
00179940    0094   0005   0078   0056   00DB   00CF   006C   0015
00179950    003C   00D8   00D2   00DD   00B9   000D   00FB   00F0
00179960    003B   00F5   00A4   0075   00B6   005C   0038   0066
00179970    002F   007E   0061   0058   00D9   00B8   0001   0033
00179980    00E2   0057   00E1   00AA   0010   0096   001D   00E9
00179990    002B   0018   007C   00E4   00BC   0036   00CB   001B
001799A0    0052   0082   0084   00FE   0062   0073   00EE   008F
001799B0    0019   00E6   0090   002A   0093   0053   009B   0079
001799C0    0029   00B3   000B   003A   00C2   0028   00C0   00D3
001799D0    00CD   002E   00F3   006D   0071   0043   00CA   0009
001799E0    003D   004E   0092   002D   0068   005E   0087   0081
001799F0    00C1   007F   007B   0041   00F6   009E   003F   008D
00179A00    0047   00F7   008E   0074   002C   00B1   0016   00AE
00179A10    0098   001F   00F4   00DE   008C   0049   00EF   00A2
00179A20    0099   005D   009A   006E   0059   00B5   00AF   0023
00179A30    00A3   009C   007D   00A1   00F1   0014   0050   00C9
00179A40    00AD   00FD   005B   0000   006A   00D0   004B   0037

00179A50    0000   0001   0002   0003   0004   0005   0006   0007
00179A60    0008   0009   000A   000B   000C   000D   000E   000F
00179A70    0010   0011   0012   0013   0014   0015   0016   0017
00179A80    0018   0019   001A   001B   001C   001D   001E   001F
00179A90    0020   0021   0022   0023   0024   0025   0026   0027
00179AA0    0028   0029   002A   002B   002C   002D   002E   002F
00179AB0    0030   0031   0032   0033   0034   0035   0036   0037
00179AC0    0038   0039   003A   003B   003C   003D   003E   003F
00179AD0    0040   0041   0042   0043   0044   0045   0046   0047
00179AE0    0048   0049   004A   004B   004C   004D   004E   004F
00179AF0    0050   0051   0052   0053   0054   0055   0056   0057
00179B00    0058   0059   005A   005B   005C   005D   005E   005F
00179B10    0060   0061   0062   0063   0064   0065   0066   0067
00179B20    0068   0069   006A   006B   006C   006D   006E   006F
00179B30    0070   0071   0072   0073   0074   0075   0076   0077
00179B40    0078   0079   007A   007B   007C   007D   007E   007F
00179B50    0080   0081   0082   0083   0084   0085   0086   0087
00179B60    0088   0089   008A   008B   008C   008D   008E   008F
00179B70    0090   0091   0092   0093   0094   0095   0096   0097
00179B80    0098   0099   009A   009B   009C   009D   009E   009F
00179B90    00A0   00A1   00A2   00A3   00A4   00A5   00A6   00A7
00179BA0    00A8   00A9   00AA   00AB   00AC   00AD   00AE   00AF
00179BB0    00B0   00B1   00B2   00B3   00B4   00B5   00B6   00B7
00179BC0    00B8   00B9   00BA   00BB   00BC   00BD   00BE   00BF
00179BD0    00C0   00C1   00C2   00C3   00C4   00C5   00C6   00C7
00179BE0    00C8   00C9   00CA   00CB   00CC   00CD   00CE   00CF
00179BF0    00D0   00D1   00D2   00D3   00D4   00D5   00D6   00D7
00179C00    00D8   00D9   00DA   00DB   00DC   00DD   00DE   00DF
00179C10    00E0   00E1   00E2   00E3   00E4   00E5   00E6   00E7
00179C20    00E8   00E9   00EA   00EB   00EC   00ED   00EE   00EF
00179C30    00F0   00F1   00F2   00F3   00F4   00F5   00F6   00F7
00179C40    00F8   00F9   00FA   00FB   00FC   00FD   00FE   00FF
-----------------------------------------------------------------
这时的数据表1就是用来替换的表了!
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2005-2-11 10:29
4
0
表1和表2是不是一个用来加密,一个用来解密?
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-11 13:09
5
0
加密解密都是用的一张表,就是最后变换之后的TAB1,(由于是网络认证的东西我只能看到一段的算法,但是从发送和接收的加密解密算法上面看就是一个算法用的是一张表)这也就是我想不明白的地方!
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
cnbragon 18 2005-2-11 17:32
6
0
算法不难
按照楼主给的8个表的顺序命名如下:
a1[] a1[a4[i]]==a3[i]   式1
a2[]
a3[] a3[i]
a4[] a4[i]
a5[]
a4[]
a6[] a4[a6[j]]==a7[j]   式2
a7[]
其中a1为subkey,
a3[]==a5[]==a7[]
最后用a6[]来加密和解密

假设j=1
则从a6[]中取数据时
根据式2,有
a6[1]=00BB   这个是由j得到的i
a7[1]=0001
根据式1,有
a1[a4[00BB]]=a3[00bb]=5F00 这就是subkey中的内容

可见由唯一的j,就可以得到唯一的subkey(也就是i),反过来,由唯一的subkey(也就是i)也可以得到唯一的j,因此这个算法是可逆的,即对称的,因此加密和解密只需使用表a6[]即可, 也就是说a6[]和a1[](也就是subkey)是一一对应的,现在要知道是如何生成a1[](也就是subkey)以及如何用a6[]来替换,请楼主详细说明

另外,有几个楼主所说的table2数组,楼主好像都多帖了两行吧
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-11 18:17
7
0
谢谢!两位版主的热心帮助!这个算法的求逆已经解决了!因为最初生成的TAB1中的数据是不重复的,所以无论怎么排序最后生成的表都是对应的!求逆就是从最后生成生成的TAB1中查找出密文相同的数据,而数据所在数组的索引就是明文了!
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-11 18:18
8
0
00406227   > /8345 08 08    ADD DWORD PTR SS:[EBP+8],8
0040622B   . |C745 9C 04000>MOV DWORD PTR SS:[EBP-64],4
00406232   . |8D75 D0       LEA ESI,DWORD PTR SS:[EBP-30]
00406235   > |8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
00406238   . |8B12          MOV EDX,DWORD PTR DS:[EDX]
0040623A   . |8B06          MOV EAX,DWORD PTR DS:[ESI]
0040623C   . |8D4D A0       LEA ECX,DWORD PTR SS:[EBP-60]
0040623F   . |8B0C81        MOV ECX,DWORD PTR DS:[ECX+EAX*4]
00406242   . |8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]
00406245   . |8D7D A0       LEA EDI,DWORD PTR SS:[EBP-60]
00406248   . |8B0487        MOV EAX,DWORD PTR DS:[EDI+EAX*4]
0040624B   . |8B5E 08       MOV EBX,DWORD PTR DS:[ESI+8]
0040624E   . |8D7D A0       LEA EDI,DWORD PTR SS:[EBP-60]
00406251   . |8B1C9F        MOV EBX,DWORD PTR DS:[EDI+EBX*4]
00406254   . |03D3          ADD EDX,EBX
00406256   . |03DA          ADD EBX,EDX
00406258   . |8BFA          MOV EDI,EDX
0040625A   . |C1EF 07       SHR EDI,7
0040625D   . |33D7          XOR EDX,EDI
0040625F   . |03CA          ADD ECX,EDX
00406261   . |03D1          ADD EDX,ECX
00406263   . |8BF9          MOV EDI,ECX
00406265   . |C1E7 0D       SHL EDI,0D
00406268   . |33CF          XOR ECX,EDI
0040626A   . |03C1          ADD EAX,ECX
0040626C   . |03C8          ADD ECX,EAX
0040626E   . |8BF8          MOV EDI,EAX
00406270   . |C1EF 11       SHR EDI,11
00406273   . |33C7          XOR EAX,EDI
00406275   . |03D8          ADD EBX,EAX
00406277   . |03C3          ADD EAX,EBX
00406279   . |8BFB          MOV EDI,EBX
0040627B   . |C1E7 09       SHL EDI,9
0040627E   . |33DF          XOR EBX,EDI
00406280   . |03D3          ADD EDX,EBX
00406282   . |03DA          ADD EBX,EDX
00406284   . |8BFA          MOV EDI,EDX
00406286   . |C1EF 03       SHR EDI,3
00406289   . |33D7          XOR EDX,EDI
0040628B   . |03CA          ADD ECX,EDX
0040628D   . |8BD1          MOV EDX,ECX
0040628F   . |C1E2 07       SHL EDX,7
00406292   . |33CA          XOR ECX,EDX
00406294   . |03C1          ADD EAX,ECX
00406296   . |8BD3          MOV EDX,EBX
00406298   . |C1EA 0F       SHR EDX,0F
0040629B   . |33C2          XOR EAX,EDX
0040629D   . |03D8          ADD EBX,EAX
0040629F   . |8BC3          MOV EAX,EBX
004062A1   . |C1E0 0B       SHL EAX,0B
004062A4   . |33D8          XOR EBX,EAX
004062A6   . |8B4D 08       MOV ECX,DWORD PTR SS:[EBP+8]
004062A9   . |8B41 04       MOV EAX,DWORD PTR DS:[ECX+4]
004062AC   . |33C3          XOR EAX,EBX
004062AE   . |8B11          MOV EDX,DWORD PTR DS:[ECX]
004062B0   . |8951 04       MOV DWORD PTR DS:[ECX+4],EDX
004062B3   . |8901          MOV DWORD PTR DS:[ECX],EAX
004062B5   . |83C6 0C       ADD ESI,0C
004062B8   . |FF4D 9C       DEC DWORD PTR SS:[EBP-64]
004062BB   . |837D 9C 00    CMP DWORD PTR SS:[EBP-64],0
004062BF   .^|0F85 70FFFFFF JNZ unpacked.00406235
004062C5   .  8B75 08       MOV ESI,DWORD PTR SS:[EBP+8]
004062C8   .  8B06          MOV EAX,DWORD PTR DS:[ESI]
004062CA   .  8746 04       XCHG DWORD PTR DS:[ESI+4],EAX
004062CD   .  8906          MOV DWORD PTR DS:[ESI],EAX
004062CF   .  FF4D 0C       DEC DWORD PTR SS:[EBP+C]
004062D2   >  837D 0C 00    CMP DWORD PTR SS:[EBP+C],0
004062D6   .^ 0F87 4BFFFFFF JA unpacked.00406227

前面的问题都已经解决,并且用程序模拟出来了,已经核对没有错误!
我现在在想上面代码的求逆!这个算法组合还真的挺麻烦的!
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2005-2-11 20:12
9
0
加密和解密用同一张表,加解密程序是不一样的;
如果解密时用从小到大排序前的表2,加解密程序就是相同的。

这是256元的单表代替,只要知道一定量的密文,再知道底码规律,求出明文是轻而易举的。
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-11 21:10
10
0
由于服务器端的程序我看不到,所以不知道是怎么回事只能靠猜!等我把算法都搞清楚我在贴出他的算法流程和我猜出的服务器端程序!
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-16 03:04
11
0
unit EnDeClass;

interface

uses
  Windows, Messages, SysUtils, Classes;

const
  keystar:array [0..5]of word=($01,$42,$C6,$78,$13,$64);

type
  TEnDeclass = class
private
    Okey:array [1..3,1..4]of dword;//变换之后的3组KEY
    keytab:array[0..47]of byte;
    keytable:array[0..11] of Dword;
    keysy:array[0..11]of Dword;
    zhongzhi1:Dword;               //种子
    table1:array[0..255] of word;  //表1 加密表
    table2:array[0..255] of word;  //表2
    Buff:array[0..35]of dword;
    procedure Zz_Key(Key_A,Key_B:Dword);
    function  Sf1(Meax:Dword):word;
    procedure Sf2(Len,Mjs:Dword;var Tab1,tab2:array of word);
    procedure Table_Star(Key:Dword);
    { Private declarations }
  public
    { Public declarations }
    procedure key_key(var A,b:DWORD);
    procedure EnCode(Key_A,Key_B:Dword;var Bbuff:array of byte;Len:Word);
    procedure DeCode(Key_A,Key_B:Dword;var Buff:array of Byte;Len:Word);
  end;

implementation

procedure TEnDeclass.key_key(var A,b:DWORD);
//获得初始KEY的种子 A,B
var
int:integer;
begin
  A:=$641378C6;//文件大小获得的数据
  a:=0;
  b:=0;
  //01 42 C6 78 13 64
  for int:=0 to 5 do
   b:=b+keystar[int];
  a:=GetTickCount;
end;

procedure TEnDeclass.Zz_Key(Key_A,Key_B:Dword);
//种子-->KEY
var
a,b:dword;      //A,B两个KEY种子
int:word;  //循环计数
str:string;//中间变量
key,key1,key2,key3:string;
Ikey,c,d:Dword;
begin
key1:=lowercase(inttohex(key_a,8)+inttohex(key_b,8));
key2:=uppercase(inttohex(key_a,8)+inttohex(key_b,8));
  str:='00000000'+inttostr(key_a);
  if length(str)>16 then
  begin
    key3:=copy(str,length(str)-8,9);
    str:='0000'+inttostr(key_b);
    key3:=key3+copy(str,1,7);
  end
  else
  begin
  key3:=copy(str,length(str)-7,8);
  str:='00000000'+inttostr(key_b);
  key3:=key3+copy(str,length(str)-7,8);
  end;
//KEY由3部分组成
key:=key1+key2+key3;
//显示初始的KEY
str:='';
//开始对KEY进行变换
//用A对KEY1进行变换
a:=Key_A;
for int:=4 downto 1 do
begin
  str:=copy(key1,int*4-3,4);
  key:='$'+inttohex(ord(str[4]),2)+inttohex(ord(str[3]),2)+
           inttohex(ord(str[2]),2)+inttohex(ord(str[1]),2);
  Ikey:=strtoint(key);
  Ikey:=Ikey xor a;
  a:=a+1;
  Okey[1,int]:=Ikey;
end;
//用B对KEY2进行变换
B:=Key_B;
for int:=4 downto 1 do
begin
  str:=copy(key2,int*4-3,4);
  key:='$'+inttohex(ord(str[4]),2)+inttohex(ord(str[3]),2)+
           inttohex(ord(str[2]),2)+inttohex(ord(str[1]),2);
  Ikey:=strtoint(key);
  Ikey:=Ikey xor B;
  B:=B+1;
  Okey[2,int]:=Ikey;
end;
//用A+B对KEY3进行变换
a:=Key_A+Key_B;
for int:=4 downto 1 do
begin
  str:=copy(key3,int*4-3,4);
  key:='$'+inttohex(ord(str[4]),2)+inttohex(ord(str[3]),2)+
           inttohex(ord(str[2]),2)+inttohex(ord(str[1]),2);
  Ikey:=strtoint(key);
  Ikey:=Ikey xor a;
  a:=a+1;
  Okey[3,int]:=Ikey;
end;
move(Okey,keytab,12*sizeof(Dword));
move(Okey,keytable,12*sizeof(Dword));

for int:=0 to 11 do
  keysy[int]:=int;
int:=0;
Repeat
  a:=keytab[int] and $b;
  b:=keytab[int+1] and $b;
  if a<>b then
  begin
    c:=keysy[a];
    d:=keysy;
    keysy[a]:=d;
    keysy:=c;
  end;
  int:=int+2;
Until int>=$30;

end;

function TEnDeclass.Sf1(Meax:Dword):word;
//生成初始表的数据
var
  Mecx:Dword;
begin
  Mecx:=zhongzhi1;
  Mecx:=Mecx * $343FD + $269EC3;
  Mecx:=Mecx and $ffffffff;
  zhongzhi1:=Mecx;
  Mecx:=Mecx shr $10;
  Mecx:=Mecx and $7fff;
  sf1:=Mecx;
end;

procedure TEnDeclass.Sf2(Len,Mjs:Dword;var Tab1,tab2:array of word);
//排序并记录交换顺序
var
  Mebx,Mebp:Dword;
  Mesp20,MDx,MDi,Meax:word;
begin
Mebx:=0;
Mebp:=len;
Mesp20:=0;
while Mesp20=0 do
begin
  if Mebx>Mebp then break;
  Mebp:=len;
  Mesp20:=1;
  Meax:=1;
  Repeat
    Mdx:=tab1[Meax-1];
    Mdi:=tab1[Meax];
    if Mdx>Mdi then
    begin
      tab1[Meax-1]:=Mdi;
      tab1[Meax]:=Mdx;
      Mdi:=tab2[Meax-1];
      Mdx:=tab2[Meax];
      tab2[Meax]:=Mdi;
      tab2[Meax-1]:=Mdx;
      Mesp20:=0;
    end;
    Meax:=Meax+1;
    Mebp:=Mebp-1;
  Until Mebp=0;
end;
end;

procedure TEnDeclass.Table_Star(Key:Dword);
//生成加密&解密用的表
var
int,Mesi:word;
Mecx:Dword;
label label1;
begin
zhongzhi1:=Key;
Mesi:=0;
Repeat
  table2[Mesi]:=Mesi;
  int:=Sf1(zhongzhi1);
  Mecx:=0;
  if Mesi<>0 then
  begin
    Repeat
    //Medx:=Mecx;
    //Medx:=Medx and $ffff;
    if int=table1[Mecx] then
    begin
      int:=Sf1(zhongzhi1);
      Mecx:=0;
      goto label1;
    end;
    Mecx:=Mecx+1;
    label1:
    Until Mecx>Mesi;
  end;
  table1[Mesi]:=int;
  Mesi:=Mesi+1;
Until Mesi>=$100;
//到这里就是00405FDE
Sf2($ff,0,Table1,table2);
for int:=0 to 255 do
  table1[int]:=int;
Sf2($ff,0,Table2,table1);
//现在的TABLE1就是转换之后的TABLE了可以直接用来加密和解密了
end;

procedure TEnDeclass.EnCode(Key_A,Key_B:Dword;var Bbuff:array of byte;Len:Word);
var
Mesi,Mesp,Mebp,int:word;
Meax,Medi,Mebx,Mecx,Medx:Dword;
begin
move(bbuff,buff,len );
//种子变成KEY缓冲区  生成   buff   keytable   keysy
Zz_Key(Key_A,Key_B);
//用keytable , keysy对buff进行欲处理
Mesi:=0;  //每次用2个缓冲区数据
//Mebp:=(len-8)shr 3; //外循环一共循环15次
Mebp:=len shr 3;
Repeat
  int:=4;   //内循环一个循环4次
  Mesp:=0;  //每次用3个索引表数据
  Repeat
   Medx:=buff[Mesi];     //0
   Mecx:=keytable[keysy[Mesp]];
   Meax:=keytable[Keysy[Mesp+1]];
   Mebx:=keytable[keysy[Mesp+2]];

   Medx:=Medx+Mebx;
  Mebx:=Mebx+Medx;
   Medi:=Medx;
   Medi:=Medi shr 7;
   Medx:=Medx xor Medi;
   Mecx:=Mecx+Medx;
   Medx:=Medx+Mecx;
   Medi:=Mecx;
   Medi:=Medi shl $d;
   Mecx:=Mecx xor Medi;
   Meax:=Meax+Mecx;
   Mecx:=Mecx+Meax;
   Medi:=Meax;
   Medi:=Medi shr $11;
   Meax:=Meax xor Medi;
  Mebx:=Mebx+Meax;
   Meax:=Meax+Mebx;
   Medi:=Mebx;
   Medi:=Medi shl 9;
  Mebx:=Mebx xor Medi;
   Medx:=Medx+Mebx;
  Mebx:=Mebx+Medx;
   Medi:=Medx;
   Medi:=Medi shr 3;
   Medx:=Medx xor Medi;
   Mecx:=Mecx+Medx;
   Medx:=Medx+Mecx;
   Medx:=Medx shl 7;
   Mecx:=Mecx xor Medx;
   Meax:=Meax+Mecx;
   Medx:=Mebx;
   Medx:=Medx shr $f;
   Meax:=Meax xor Medx;
   Mebx:=Mebx+Meax;
   Meax:=Mebx;
   Meax:=Meax shl $b;
   Mebx:=Mebx xor Meax;

   Meax:=buff[Mesi+1];//1
   Meax:=Meax xor Mebx;
   Medx:=buff[Mesi];  //0
   buff[Mesi+1]:=Medx;
   buff[Mesi]:=Meax;
   Mesp:=Mesp+3;
   int:=int-1;
  Until int=0;
  Meax:=buff[Mesi];
  Medx:=buff[Mesi+1];
  buff[Mesi]:=Medx;
  buff[Mesi+1]:=Meax;
  Mesi:=Mesi+2;
  Mebp:=Mebp-1;
Until Mebp=0;
//生成用于加密的数据表 TABLE1
Table_Star(Key_A);
//加密处理数据
move(buff,bbuff,len);
  for int:=0 to len-1 do
  begin
    Bbuff[int]:=table1[Bbuff[int]];
  end;
end;

procedure  TEnDeclass.DeCode(Key_A,Key_B:Dword;var Buff:array of Byte;Len:Word);
var
int,int2:word;
begin
  Table_Star(Key_A);
  for int:=0 to len-1 do
  begin
    for int2:=0 to 255 do
    begin
      if buff[int]=table1[int2] then buff[int]:=int2;
    end;
  end;
end;

end.

代码是我按照程序中的算法描述的没有优化只是对数据处理的结果是一致的!
最近由于个人方面出了点问题,没有多余的时间去想这个事情!所以问题还没有能够完美的解决,这个加密解密的类是我没有时间整理和完成的算法描述!先贴出来各位帮忙想想办法!
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy 2005-2-16 09:58
12
0
大家都可以想办法啊
不一定非得是斑竹
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
金鹰 2005-2-17 13:58
13
0
有点象RC4序列密码算法
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
金鹰 2005-2-17 15:01
14
0
不是RC4,是单表替代型。不需要管加密表的生成过程,只要知道密匙和可以利用表生产算法即可。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
金鹰 2005-2-17 15:30
15
0
楼主的Pascal代码偶不熟悉,用C 改写出来吧

如果真的如1楼所说,那么这个加密“算法”不能成其为一个加密算法。它存在着整体上的弱点: 事实上最初的 Key, 最初的 Tab1, 最后的 Tab1 都是“Key”:密匙。不需要从最后的Tab1 去倒推最初的Key。如果能够获得最后的Tab1,那么就可以直接加解密获得的明文或密文。如果不能获得最后的Tab1,但是可以得到最初的Key 和可以调用你那个变换算法,那么必定可以生成最后的Tab1,同样不需要倒推。所以如果只是需要解密密文,去理解这个算法不必要。反过来,如果不能获得3个密匙中的任何一个,那么即使理解和得到了算法也无法解开。所以不知道楼主的目的是什么?
雪    币: 229
活跃值: (65)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
PowerBoy 3 2005-2-17 22:23
16
0
我的疏忽啊!居然没有写明白我的目的!我写的过程就是可以利用得到的KEY对密文进行解密了!我想知道这样的解密算法怎么得到加密算法!查表解密和加密我已经想明白了!就是:
00406227   > /8345 08 08    ADD DWORD PTR SS:[EBP+8],8
0040622B   . |C745 9C 04000>MOV DWORD PTR SS:[EBP-64],4
00406232   . |8D75 D0       LEA ESI,DWORD PTR SS:[EBP-30]
00406235   > |8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
00406238   . |8B12          MOV EDX,DWORD PTR DS:[EDX]
0040623A   . |8B06          MOV EAX,DWORD PTR DS:[ESI]
0040623C   . |8D4D A0       LEA ECX,DWORD PTR SS:[EBP-60]
0040623F   . |8B0C81        MOV ECX,DWORD PTR DS:[ECX+EAX*4]
00406242   . |8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]
00406245   . |8D7D A0       LEA EDI,DWORD PTR SS:[EBP-60]
00406248   . |8B0487        MOV EAX,DWORD PTR DS:[EDI+EAX*4]
0040624B   . |8B5E 08       MOV EBX,DWORD PTR DS:[ESI+8]
0040624E   . |8D7D A0       LEA EDI,DWORD PTR SS:[EBP-60]
00406251   . |8B1C9F        MOV EBX,DWORD PTR DS:[EDI+EBX*4]
00406254   . |03D3          ADD EDX,EBX
00406256   . |03DA          ADD EBX,EDX
00406258   . |8BFA          MOV EDI,EDX
0040625A   . |C1EF 07       SHR EDI,7
0040625D   . |33D7          XOR EDX,EDI
0040625F   . |03CA          ADD ECX,EDX
00406261   . |03D1          ADD EDX,ECX
00406263   . |8BF9          MOV EDI,ECX
00406265   . |C1E7 0D       SHL EDI,0D
00406268   . |33CF          XOR ECX,EDI
0040626A   . |03C1          ADD EAX,ECX
0040626C   . |03C8          ADD ECX,EAX
0040626E   . |8BF8          MOV EDI,EAX
00406270   . |C1EF 11       SHR EDI,11
00406273   . |33C7          XOR EAX,EDI
00406275   . |03D8          ADD EBX,EAX
00406277   . |03C3          ADD EAX,EBX
00406279   . |8BFB          MOV EDI,EBX
0040627B   . |C1E7 09       SHL EDI,9
0040627E   . |33DF          XOR EBX,EDI
00406280   . |03D3          ADD EDX,EBX
00406282   . |03DA          ADD EBX,EDX
00406284   . |8BFA          MOV EDI,EDX
00406286   . |C1EF 03       SHR EDI,3
00406289   . |33D7          XOR EDX,EDI
0040628B   . |03CA          ADD ECX,EDX
0040628D   . |8BD1          MOV EDX,ECX
0040628F   . |C1E2 07       SHL EDX,7
00406292   . |33CA          XOR ECX,EDX
00406294   . |03C1          ADD EAX,ECX
00406296   . |8BD3          MOV EDX,EBX
00406298   . |C1EA 0F       SHR EDX,0F
0040629B   . |33C2          XOR EAX,EDX
0040629D   . |03D8          ADD EBX,EAX
0040629F   . |8BC3          MOV EAX,EBX
004062A1   . |C1E0 0B       SHL EAX,0B
004062A4   . |33D8          XOR EBX,EAX
004062A6   . |8B4D 08       MOV ECX,DWORD PTR SS:[EBP+8]
004062A9   . |8B41 04       MOV EAX,DWORD PTR DS:[ECX+4]
004062AC   . |33C3          XOR EAX,EBX
004062AE   . |8B11          MOV EDX,DWORD PTR DS:[ECX]
004062B0   . |8951 04       MOV DWORD PTR DS:[ECX+4],EDX
004062B3   . |8901          MOV DWORD PTR DS:[ECX],EAX
004062B5   . |83C6 0C       ADD ESI,0C
004062B8   . |FF4D 9C       DEC DWORD PTR SS:[EBP-64]
004062BB   . |837D 9C 00    CMP DWORD PTR SS:[EBP-64],0
004062BF   .^|0F85 70FFFFFF JNZ unpacked.00406235
004062C5   .  8B75 08       MOV ESI,DWORD PTR SS:[EBP+8]
004062C8   .  8B06          MOV EAX,DWORD PTR DS:[ESI]
004062CA   .  8746 04       XCHG DWORD PTR DS:[ESI+4],EAX
004062CD   .  8906          MOV DWORD PTR DS:[ESI],EAX
004062CF   .  FF4D 0C       DEC DWORD PTR SS:[EBP+C]
004062D2   >  837D 0C 00    CMP DWORD PTR SS:[EBP+C],0
004062D6   .^ 0F87 4BFFFFFF JA unpacked.00406227
//////////////////////////////////////////////////////////
move(bbuff,buff,len );
//种子变成KEY缓冲区  生成   buff   keytable   keysy
Zz_Key(Key_A,Key_B);
//用keytable , keysy对buff进行欲处理
Mesi:=0;  //每次用2个缓冲区数据
//Mebp:=(len-8)shr 3; //外循环一共循环15次
Mebp:=len shr 3;
Repeat
  int:=4;   //内循环一个循环4次
  Mesp:=0;  //每次用3个索引表数据
  Repeat
   Medx:=buff[Mesi];     //0
   Mecx:=keytable[keysy[Mesp]];
   Meax:=keytable[Keysy[Mesp+1]];
   Mebx:=keytable[keysy[Mesp+2]];

   Medx:=Medx+Mebx;
  Mebx:=Mebx+Medx;
   Medi:=Medx;
   Medi:=Medi shr 7;
   Medx:=Medx xor Medi;
   Mecx:=Mecx+Medx;
   Medx:=Medx+Mecx;
   Medi:=Mecx;
   Medi:=Medi shl $d;
   Mecx:=Mecx xor Medi;
   Meax:=Meax+Mecx;
   Mecx:=Mecx+Meax;
   Medi:=Meax;
   Medi:=Medi shr $11;
   Meax:=Meax xor Medi;
  Mebx:=Mebx+Meax;
   Meax:=Meax+Mebx;
   Medi:=Mebx;
   Medi:=Medi shl 9;
  Mebx:=Mebx xor Medi;
   Medx:=Medx+Mebx;
  Mebx:=Mebx+Medx;
   Medi:=Medx;
   Medi:=Medi shr 3;
   Medx:=Medx xor Medi;
   Mecx:=Mecx+Medx;
   Medx:=Medx+Mecx;
   Medx:=Medx shl 7;
   Mecx:=Mecx xor Medx;
   Meax:=Meax+Mecx;
   Medx:=Mebx;
   Medx:=Medx shr $f;
   Meax:=Meax xor Medx;
   Mebx:=Mebx+Meax;
   Meax:=Mebx;
   Meax:=Meax shl $b;
   Mebx:=Mebx xor Meax;

   Meax:=buff[Mesi+1];//1
   Meax:=Meax xor Mebx;
   Medx:=buff[Mesi];  //0
   buff[Mesi+1]:=Medx;
   buff[Mesi]:=Meax;
   Mesp:=Mesp+3;
   int:=int-1;
  Until int=0;
  Meax:=buff[Mesi];
  Medx:=buff[Mesi+1];
  buff[Mesi]:=Medx;
  buff[Mesi+1]:=Meax;
  Mesi:=Mesi+2;
  Mebp:=Mebp-1;
Until Mebp=0;
这段算法的逆算法我搞不出来啊!
如果能写出这段的逆算法这个算法我就可以全部搞定了!@而且这个算法确实在整体上存在问题!但上面这段的算法的逆算法我遇到点麻烦!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
金鹰 2005-2-18 19:01
17
0
偶看过一会《应用密码学》,现有的大多数公开的对称密码算法都没有专门的逆算法,它们的加解密在整体上设计成与算法方向无关。
你这个所谓的“加密”算法,也应该是如此。由于是单表密码模式,其加解密都是通过这张表进行,加密时,查表;解密时,反查表。也即是说加密过程就是查表过程,哪里还需要找什么逆过程? 估计设计者就是这么考虑的。只是他为了提高一点点强度,把静态的单表变成了动态的单表,让每个Key尽可能生成一张不同的表,他那个由Key到表的过程应该是一种Hash过程吧? 他在服务端也应该是这么干的,因为不需要找个逆算法来加密---密文的加解密过程可以与表生成过程无关,所以你究竟是要找什么逆算法?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
金鹰 2005-2-18 19:07
18
0
这种思想的加密方案中,加密,即查表;解密,即反查表。表的来源可以是任意的。
游客
登录 | 注册 方可回帖
返回