[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
以后可以用摩尔密码讲粗话不……


那个第一版的跟其他排的不一样,不统一哈
*******************************************************************
第1版
第1行: 蔡-町-铩-姬 摩-倡-词-洹 迪-龟-逵-骢 芄-粒-溧-唠 剸-炎-宜-淙


第2版
*******************************************************************
第1行: 砒-唳-珀-侉 珩-嗝-甥-锬 壅-初-邺-蹉 揍-琉-听-柲 憃-釉-链-椑

[ 本帖最后由 523066680 于 2009-11-23 08:52 编辑 ]

TOP

这次想找人合作……
从来没有过合作写批处理的感觉,唉~

[ 本帖最后由 523066680 于 2009-11-23 14:21 编辑 ]

TOP

回复 4楼 的帖子

是这样子的,我认为排列如果固定,解密的时候可以直接计算
来得到该字所在的行,会省很多事

[ 本帖最后由 523066680 于 2009-11-23 16:39 编辑 ]

TOP

字典的文件名在开头定义,句子数量在开头定义


解密
  1. @echo off
  2. echo %time%
  3. setlocal enabledelayedexpansion
  4. set dict=dictionary.txt
  5. set codex=2
  6. set "code_1=17-5-5-1 8-2-2-4 17-10-4-4 9-8-3-1 3-2-5-3 21-7-1-2 15-9-1-3"
  7. set "code_2=24-5-3-1 10-5-3-4 28-5-1-2 3-2-5-3 21-7-1-2 7-10-4-4 25-5-4-4 32-1-5-3 31-3-5-3 25-7-1-2 12-2-4-1 3-2-5-1"
  8. for /l %%a in (1,1,%codex%) do (set all=!all! !code_%%a!)
  9. ::for遍历记录将要用到的行,避免每次都读取文本。
  10. for /f "tokens=1,*" %%a in (%dict%) do (
  11.    set now=%%a
  12.    if "!now:~0,1!!now:~-1!"=="第版" (set "na=!now:第=!" &set "na=!na:版=!")
  13.    if "!now:~0,1!!now:~-2!"=="第行:" (
  14.       set "nb=!now:第=!" &set "nb=!nb:行:=!"
  15.       for %%A in (!na!-!nb!) do (
  16.         if not "!all: %%A=!"=="!all!" (
  17.           set Line%%A=%%b
  18.         )
  19.       )
  20.    )
  21. )
  22. ::针对那两句
  23. for /l %%a in (1,1,%codex%) do (
  24.   for %%b in (!code_%%a!) do (
  25.      set "now=%%b" &set "now=!now:-= !"
  26.      set /a n=0
  27.      for %%c in (!now!) do (set /a n+=1 &set num_!n!=%%c)
  28.      set /a col=num_3*8-8+num_4*2-2
  29.      for %%d in (!num_1!-!num_2!) do (set now=!Line%%d!)
  30.      for %%d in (!col!) do (set /p=!now:~%%d,1!<nul)
  31.   )
  32.   echo,
  33. )
  34. echo %time%
  35. pause
复制代码
加密

  1. @echo off
  2. echo %time%
  3. setlocal enabledelayedexpansion
  4. set dict=dictionary.txt
  5. set /a sayx=2
  6. set "say_1=我想他肯定知道这个地方有段好难走的路"
  7. set "say_2=当敌人冲过来后你就拉响前面的警报"
  8. for /l %%a in (1,1,50) do (set one=111111!one!)
  9. for /l %%a in (1,1,%sayx%) do (
  10. set count=!say_%%a!#%one%
  11. set count=!count:~0,300!
  12. set count=!count:*#=!
  13. set /a count%%a=300!count:1=-1!-1-1
  14. for /l %%n in (0,1,!count%%a!) do (set "str_%%a=!str_%%a!!say_%%a:~%%n,1! ")
  15. set strx_%%a=!str_%%a!
  16. )
  17. set /a na=0
  18. ::for遍历记录将要用到的行,避免每次都读取文本。
  19. for /f "tokens=1,*" %%a in (%dict%) do (
  20.    set now=%%a
  21.    if "!now:~0,1!!now:~-1!"=="第版" (set /a na+=1,nb=0)
  22.    if "!now:~0,1!!now:~-2!"=="第行:" (
  23.       set /a nb+=1
  24.       set now=%%b
  25.       for /l %%A in (1,1,%sayx%) do (
  26.          for %%B in (!str_%%A!) do (
  27.          if not "!now:%%B=!"=="!now!" (
  28.              set count=!now:*%%B=!#%one%
  29.              set count=!count:~0,300!
  30.              set count=!count:*#=!
  31.              set /a count=300!count:1=-1!-1,count=40-count,nc=count/8+1,nd=count%%8+1,nd=nd/2
  32.              for %%C in (!na!-!nb!-!nc!-!nd!) do (
  33.                set strx_%%A=!strx_%%A:%%B=%%C!
  34.              )
  35.              set str_%%A=!str_%%A:%%B=!
  36.          )
  37.          )
  38.       )
  39.    )
  40. )
  41. for /l %%a in (1,1,%sayx%) do (echo !strx_%%a! &echo,)
  42. echo %time%
  43. pause
复制代码

[ 本帖最后由 523066680 于 2009-11-24 09:40 编辑 ]
2

评分人数

TOP

netbenton非call 那个比我的快多了~

技术狂飙28了,遥望~

[ 本帖最后由 523066680 于 2009-11-24 09:02 编辑 ]

TOP

在思路已经是最简洁的时候,再怎么改,都是空间和时间的互换。
如果还能更节约时间空间,那么一定是思路,或者操作方式上做手脚

本人此时的观点

[ 本帖最后由 523066680 于 2009-11-24 11:06 编辑 ]

TOP

第二次写加密,换个方式,我就用findstr ,不过用一次。
在我的机子上平均 0.35秒
  1. @echo off
  2. echo %time%
  3. setlocal enabledelayedexpansion
  4. set dict=dictionary.txt
  5. set /a sayx=2,act=1,b=1
  6. set "say_1=我想他肯定知道这个地方有段好难走的路"
  7. set "say_2=当敌人冲过来后你就拉响前面的警报"
  8. for /l %%a in (1,1,50) do (set one=111111!one!)
  9. for /l %%a in (1,1,%sayx%) do (
  10. set count=!say_%%a!#%one%
  11. set count=!count:~0,300!
  12. set count=!count:*#=!
  13. set /a count=300!count:1=-1!-1-1
  14. for /l %%n in (0,1,!count!) do (set "str_%%a=!str_%%a!!say_%%a:~%%n,1! ")
  15. set str=!str! !str_%%a!
  16. )
  17. for /f "tokens=1,2,* delims=: " %%a in ('findstr /n /r "%str%" %dict%') do (
  18. set now=%%c
  19. set now=!now:~1!
  20. set /a na=%%a/14+1
  21. set nb=%%b
  22. set nb=!nb:第=!
  23. set nb=!nb:行=!
  24.       for /l %%A in (1,1,%sayx%) do (
  25.          for %%B in (!str_%%A!) do (
  26.          if not "!now:%%B=!"=="!now!" (
  27.              for /l %%n in (0,1,39) do (if "!now:~%%n,1!"=="%%B" set /a count=%%n+1)
  28.              set /a nc=count/8+1,nd=count%%8+1,nd=nd/2
  29.              for %%C in (!na!-!nb!-!nc!-!nd!) do (
  30.                set say_%%A=!say_%%A:%%B= %%C!
  31.              )
  32.              set str_%%A=!str_%%A:%%B=!
  33.          )
  34.          )
  35.       )
  36. )
  37. for /l %%a in (1,1,%sayx%) do (echo !say_%%a! &echo,)
  38. echo %time%
  39. pause
复制代码

[ 本帖最后由 523066680 于 2009-11-24 12:08 编辑 ]
1

评分人数

TOP

呐,那个文字库收藏了,先来一句~

30-6-2-2 31-4-2-2 14-3-2-4 22-9-5-3 30-8-3-1 16-1-3-2 25-9-4-1 28-5-1-2 33-8-4-1 15-10-2-1, 19-9-4-2 11-6-3-3 21-10-1-1 36-8-5-4 10-1-3-4 26-2-3-1.

[ 本帖最后由 523066680 于 2009-11-24 14:16 编辑 ]

TOP

回复 16楼 的帖子

15楼的代码这边测试还蛮正常的。
是对单个字转码的。

TOP

1。我的第二次加密测试过,遇到"版 第 行"不会错的。
   因为我for 的时候提取的参考字符是 "第x版" "第x行" 后面的那些信息,如果刚好是第x版 则提取为空
   接着我后面还有个判断 -- [字符] 是否存在于 [提取的参考字符]   于是只有遇到密文对应的行才会转换。
(另外本人大胆在前面使用字符串 1 化 +1 的方式来计算 字符串长度…… 虽然体积大,
    虽然耗时0.01 秒到0.02秒,不过为了前面设置的时候可以统一,我觉得值了。)

2。netbenton的经过测试遇到这三个字转换也正常的。

3。关于字典嘛,确实做适当的调整会比较方便批处理

4。batman代码测试新homebook.txt  本机0.30 秒 左右

[ 本帖最后由 523066680 于 2009-11-25 10:02 编辑 ]

TOP

回复 30楼 的帖子

1.恩,我觉得如果是我知识范围内的东西,应该是cpu . cup是杯子
2.是不是说时间呀,
  我拿到256M的机子试过的。
  batman那个代码对应新的homebook的 速度是0.30秒左右 ,
  用旧homebook 会上秒。

TOP

解密平均0.10 s
加密平均0.20 s 多数为0.19s
鉴定为:
       都玩刷屏呢……  不加PB了。

[ 本帖最后由 523066680 于 2009-11-25 14:12 编辑 ]

TOP

自动化与手工操作的参与量,是为自己拿捏。

TOP

返回列表