找回密码
 点一下
查看: 5199|回复: 11

自制的全自动SL系统  补上加密原理

[复制链接]
发表于 2009-4-25 15:33:47 | 显示全部楼层 |阅读模式
原文非转贴

由于本人是台湾人

用字或许有点奇怪请别在意

加密原理(6楼)

VJass版载点 -推荐
Jass版载点


本系统特色:
 可以储存的资料-经验值.属性.物品.当前血魔%.座标.资源(共高达17个资料)
 全自动编号-让编号不再麻烦
 ID辨认+隐藏式密码-让玩家无法使用另一个玩家的密码
 支援数值-2147483647 ~ 2147483647 (2^31-1是数字限制已经是最大值)
 双层加密-使密码不容易被修改(隐密程度超高采用全新加密法)
 密码添色-减少密码误认情况发生
 支援任何玩家名称使用任何符号
 有自动除错
 ReSave -直接出现上次的储存密码



[v6更新重点]
※执行方法全部改变 现在可以多重执行 并且增加效率
※增加了几个可以设置的部份 现在可以完全自动支援N进位
※密码加密计算调整密码更隐密 不过不支援前面版本的密码
※增加Jass版没安装NewGen的人也可以用此系统

[v5更新重点]
※新增-SaveEX指令说明如下
//此指令用途:使用后密码会出现在魔兽资料夹\Save\Profile号码\CustomSaves内
//※ Profile号码的号码是最后一号
//※使用此指令的玩家会直接断线
//※如果有隐藏密码的化会有空白键分开建议自己试用看看

[v4更新重点]
※隐藏密码现在可以使用快捷键
※加密部分再强化现在是循环加密方式
※修正部队在血量2%以下储存后读取会造成死亡的Bug
※加密种子新增种子设置让种子有版本认证
※修正几个说明错误
※有隐藏密码的密码可以拿去读取不用隐藏密码的
※之前的密码无法读取这次版本的

[v3更新重点]
※修复几个隐藏密码的Bug现在请安心使用

[v2更新重点]
※开放隐藏密码使用
※两层的加密都增强
※加快运作速度正常状况触发处理在0.5秒内
※本次更新的密码无法与上次的使用(下次更新不受影响)


VJass版本必须安装NewGen -连结已修复

然后复制走"存档系统"资料夹下的4个触发即可使用

评分

参与人数 3威望 +107 收起 理由
恶声恶气 + 1 god like.
血戮魔动冰 + 1
kook + 105 优秀文章

查看全部评分

发表于 2009-4-25 20:46:49 | 显示全部楼层
好帖
回复

使用道具 举报

发表于 2009-4-30 12:20:28 | 显示全部楼层
收下了
好东西啊~~~
回复

使用道具 举报

发表于 2009-4-30 13:53:10 | 显示全部楼层
如果写出加密的原理的话……kook大人应该可以给你5威望吧~
只有演示的话……也就1-3威望而已~~
回复

使用道具 举报

发表于 2009-4-30 15:31:47 | 显示全部楼层
SL 原理都大同小異

地圖內有各函數的用途說明,不過詳細思路只能看圖慢慢分析了
回复

使用道具 举报

发表于 2009-4-30 15:43:03 | 显示全部楼层
[v5更新重点]
※新增-SaveEX指令说明如下
//此指令用途:使用后密码会出现在魔兽资料夹\\Save\\Profile号码\\CustomSaves内
//※ Profile号码的号码是最后一号
//※使用此指令的玩家会直接断线
//※如果有隐藏密码的化会有空白键分开建议自己试用看看

这个命令 是什么意思呢
貌似是实现了 从魔兽内部 向外保存文件的意思吧
不过怎么用呢

是以何种方式出现呢
回复

使用道具 举报

 楼主| 发表于 2009-4-30 16:43:19 | 显示全部楼层
先说Data存哪些资料

Data[0] = 0 +玩家名称(10进位)
Data[1] = 1 +英雄类型
Data[2] = 2 +英雄经验值
Data[3] = 3 +英雄力量差距
Data[4] = 4 +英雄敏捷差距
Data[5] = 5 +英雄智慧差距
Data[6] = 6 +英雄物品1
Data[7] = 7 +英雄物品2
Data[8] = 8 +英雄物品3
Data[9] = 9 +英雄物品4
Data[10] = 10 +英雄物品5
Data[11] = 11 +英雄物品6
Data[12] = 12 +英雄血量%
Data[13] = 13 +英雄魔力%
Data[14] = 14 +英雄X座标
Data[15] = 15 +英雄Y座标
Data[16] = 16 +玩家黄金
Data[17] = 17 +玩家原木
Data[18] =随机种子
Data[19] =认证码( 2^31 * Data[1] * Data[2] * ..... * Data[18] + Data[0] )

每次加密前都会先创造交换用的全字串以下是示意代码
  1. function I102S64 takes integer i returns string
  2. // ......
  3. // 10进位转64进位
  4. // ......
  5. endfunction
复制代码
  1. function CreateTempPassword takes nothing returns nothing
  2. local integer i = 0
  3. local integer i2
  4. local integer TempInteger
  5. local string TempString
  6. local string TempString1
  7. local string TempString2
  8. local string NewString
  9. local string StringAll = "0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  10. local integer StringAllLength = GetStringLength(StringAll)
  11.          local string StringIndex = GetPlayerName(GetTriggerPlayer) + I102S64(Data[19]) + "AnyString"
  12. local integer array Index
  13. // StringIndex补足字数
  14. loop
  15. exitwhen StringLength(StringIndex) >= StringAllLength
  16. set StringIndex = StringIndex + StringIndex
  17. endloop
  18. //将StringIndex每个字都换为10进位不合法字元则为最大值一半
  19. loop
  20. set TempString = SubString(StringIndex,i,i+1)
  21. set i = i + 1
  22. set i2 = 0
  23. loop
  24. exitwhen TempString == SubString(StringAll,i2,i2+1) or i2 > StringAllLength
  25. set i2 = i2 + 1
  26. endloop
  27. if i2 > StringAllLength then
  28. set Index[i] = StringAllLength / 2
  29. else
  30.                  set Index[i] = i2 + 1
  31. endif
  32. exitwhen i == StringAllLength
  33. endloop
  34. //创造新全字串这部份文字不好说明..自己看吧
  35. set TempString = ""
  36. set i2 = 0
  37. loop
  38. set ts = SubString(StringAll,i2,i2+1)
  39. set TempInteger = 0
  40. loop
  41. exitwhen TempString == SubString(StringAll,TempInteger,TempInteger+1)
  42. set TempInteger = TempInteger + 1
  43. endloop
  44. set i2 = i2 + 1
  45. if ti < Index[i2] then
  46. set TempInteger = 1
  47. elseif ti > Index[i2] then
  48. set TempInteger = -1
  49. else
  50. set TempInteger = 0
  51. endif
  52. //每执行两次就会反转
  53. if i2-i2/2/2 == 0 then
  54. set TempInteger = -TempInteger
  55. endif
  56. set ts1 = SubString(NewString,0,i2/2+ti)
  57. set ts2 = SubString(NewString,i2/2+ti,i2)
  58. set NewString = ts1 + ts + ts2
  59. exitwhen i2 == StringAllLength
  60. endloop
  61. // NewString就会是新排列过的StringAll
  62. // Ex:根据Data[19]的不同0123456789可能为0246798531也可能为1237986540或是其他组合
  63. endfunction
复制代码
接下来是加密部分这就比较简单了
简单来说就是对应位置换上新的字串

EX:
原字串0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
新字串lSo3nQeBgR6JmpIYHdPA15fqkaKcTXzCGr8syVhU2O7LxtEjwbMuF0WNivZ94D

密码如果为A1Bg7Tr
就会转变为sSyHBNT

示意代码
  1. function PasswordAddPassword takes nothing returns nothing
  2. local integer i1 = 0
  3. local integer i2
  4. local string EnterString //要转换的字串
  5. local string StringAll1 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. local string StringAll2 = "lSo3nQeBgR6JmpIYHdPA15fqkaKcTXzCGr8syVhU2O7LxtEjwbMuF0WNivZ94D"
  7. local string NewString = ""
  8. local string TempString
  9. local integer exit = StringLength(EnterString)
  10. loop
  11. exitwhen i1 > exit
  12. set TempString = SubString(EnterString,i1,i1+1)
  13. set i2 = 0
  14. loop
  15. exitwhen TempString == SubString(StringAll1,i2,i2+1) or i2 > StringAllLength
  16. set i2 = i2 + 1
  17. endloop
  18. if i2 > StringAllLength then
  19. set NewString = NewString + TempString
  20. else
  21. set NewString = NewString + SubString(StringAll2,i2,i2+1)
  22. endif
  23. set i1 = i1 + 1
  24. endloop
  25. // NewString变为被加密过的密码
  26. //不能加密的字串保留原字
  27. endfunction
复制代码
地图中的加密就是

loop
CreateTempPassword
PasswordAddPassword
endloop

做成多次加密

读取密码的时候反加密密码(一般改过密码就会出现差异巨大的数值)
再比对Data[0] (玩家名称索引)
还有比对Data[19] (认证码)瞎猜是不太可能相同的机率比中奖券还低..

最后还有隐藏式密码请参考本地图

还需要补充欢迎提出
回复

使用道具 举报

 楼主| 发表于 2009-4-30 16:50:25 | 显示全部楼层
引用第5楼dds2136于2009-04-30 15:43发表的  :
[v5更新重点]
※新增-SaveEX指令说明如下
//此指令用途:使用后密码会出现在魔兽资料夹SaveProfile号码CustomSaves内
//※ Profile号码的号码是最后一号
//※使用此指令的玩家会直接断线
.......
保存游戏

保存档案的名称为密码...

简易又好用

XD
回复 0 1

使用道具 举报

发表于 2009-4-30 17:57:41 | 显示全部楼层
话说。。想要破解档案加密的话,暴力的方法有的是啊,比如将你所用的存档加密函数从地图脚本中拽出来,自己创建个BT英雄再加密。。

使用存档来记录的方案很不错
回复

使用道具 举报

 楼主| 发表于 2009-4-30 18:30:05 | 显示全部楼层
引用第8楼kook于2009-04-30 17:57发表的  :
话说。。想要破解档案加密的话,暴力的方法有的是啊,比如将你所用的存档加密函数从地图脚本中拽出来,自己创建个BT英雄再加密。。

使用存档来记录的方案很不错
这方法必须知道英雄Type与物品Type

直接修改地图比较快吧? 囧
回复

使用道具 举报

发表于 2009-5-3 17:30:01 | 显示全部楼层
....似乎我做过很多次...
回复

使用道具 举报

发表于 2016-4-21 22:52:47 | 显示全部楼层
这个东本没下载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-25 15:23 , Processed in 0.044294 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表