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

回复 30楼 的帖子

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

TOP

我的方法再提提速速

  1. @echo off&setlocal enabledelayedexpansion
  2. set sati=!time!
  3. set Ban=0
  4. for /f "tokens=* delims=*" %%a in (homebook.txt) do (
  5.         set str=%%a
  6.         if "!str:~-1!" equ "版" (set /a Ban+=1) else (
  7.                 for /f "tokens=1,2,*" %%b in ("!ban! !str:-=!") do (set Ban%%b=!Ban%%b!%%d@)
  8.         )
  9. )
  10. ::前面读取母本到变量
  11. for /f "tokens=*" %%a in (密文.txt) do (
  12.         set 原文=
  13.         for %%b in (%%a) do (
  14.                 for /f "tokens=1-4 delims=-" %%1 in ("%%b") do (
  15.                         for /f "tokens=1-10 delims=@" %%0 in ("!Ban%%1!") do (
  16.                                 set vv=1%%02%%13%%24%%35%%46%%57%%68%%79%%810%%9
  17.                         )
  18.                         for /f "tokens=1-5" %%0 in ("!vv:*%%2=!") do (
  19.                                 set vv=1%%02%%13%%24%%35%%4
  20.                         )
  21.                         set "str=@!vv:*%%3=!"
  22.                         set 原文=!原文!!str:~%%4,1!
  23.                 )
  24.         )
  25.         echo;!原文!
  26. )
  27. ::解密
  28. echo;!sati!
  29. echo;!time!
  30. set sati=!time!
  31. for /f "tokens=*" %%a in (原文.txt) do (
  32.         set sour=%%a
  33.         set/a z=8180,x=0,y=0
  34.         for /l %%a in (1,1,14) do (set/a "y=(z-x)/2+x"
  35.             for %%b in (!y!) do if "!sour:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)
  36.         )
  37.         set 密文=
  38.         echo !sour! [!x!]
  39.         for /l %%b in (0,1,!x!) do (
  40.                 for %%c in ("!sour:~%%b,1!") do (
  41.                         for /l %%d in (1,1,!ban!) do (
  42.                                 if "!Ban%%d:%%~c=!" neq "!Ban%%d!" set str=!Ban%%d!&set zban=%%d
  43.                         )
  44.                         for /f "tokens=1-10 delims=@" %%0 in ("!str!") do (
  45.                                 set vv=1%%0@1@2%%1@2@3%%2@3@4%%3@4@5%%4@5@6%%5@6@7%%6@7@8%%7@8@9%%8@9@10%%9@10@
  46.                         )
  47.                         for /f "tokens=1,2 delims=@" %%0 in ("!vv:*%%~c=!") do (
  48.                                 set zhang=%%1
  49.                                 set vv=!vv:*%%1=!
  50.                         )
  51.                         for /f "tokens=1-5" %%0 in ("!vv!") do (
  52.                                 set vv=1%%0 @1@2%%1 @2@3%%2 @3@4%%3 @4@5%%4 @5@
  53.                         )
  54.                         for /f "tokens=1,2 delims=@" %%0 in ("!vv:*%%~c=!") do (
  55.                                 set zlie=%%1
  56.                         )
  57.                                 set vv=!vv:*%%~c=!
  58.                                 set vv=!vv: =1234!
  59.                                 set zzhi=!vv:~3,1!
  60.                
  61.                         set 密文=!密文! !zban!-!zhang!-!zlie!-!zzhi!
  62.                 )
  63.         )
  64.         echo;!密文!
  65. )
  66. ::加密
  67. echo;!sati!
  68. echo;!time!
  69. pause
  70. goto :eof
复制代码

TOP

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

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

TOP

是时候把它弄出来了

&&针对这一摩尔码加解密,本人弄了个vbs+批版的,当然为了方便先生成了一个list.txt。

该工具可以同时将转译结果显示出来并输入到剪贴板中,你只要在文本中右键或ctrl+v就

可以输出结果到文本。
  1. dim path,strinput,stroutput,counter
  2. counter=2
  3. do
  4. on error resume next
  5. if counter=1 then
  6.    exit do
  7.    else
  8.    strinput=inputbox("请输入要转译的文字或编码,退出请点取消","转译工具")
  9.    if strinput=false then
  10.       wscript.quit
  11.       else
  12.       set wshshell=createobject("wscript.shell")
  13.       path=wshshell.currentdirectory
  14.       set objie=createobject("internetexplorer.application")
  15.       set objfso=createobject("scripting.filesystemobject")
  16.       set objtext=objfso.opentextfile("temp.txt",2,true)
  17.       objtext.write strinput
  18.       objtext.close
  19.       set objtext=objfso.opentextfile("temp.bat",2,true)
  20.       objtext.writeline "@echo off&setlocal enabledelayedexpansion"
  21.       objtext.writeline "set /p input=<temp.txt&del /q temp.txt&set "&chr(34)&"k= "&chr(34)
  22.       objtext.writeline "if "&chr(34)&"%input:-=%"&chr(34)&" neq "&chr(34)&"%input%"&chr(34)&" set "&chr(34)&"k="&chr(34)&"&set "&chr(34)&"str=%input%"&chr(34)&"&goto next"
  23.       objtext.writeline ":lp"
  24.       objtext.writeline "set "&chr(34)&"str=%str% %input:~,1%"&chr(34)
  25.       objtext.writeline "set "&chr(34)&"input=%input:~1%"&chr(34)
  26.       objtext.writeline "if defined input goto lp"
  27.       objtext.writeline ":next"
  28.       objtext.writeline "for /f "&chr(34)&"tokens=1,2"&chr(34)&" %%a in ('findstr /r "&chr(34)&"%str%"&chr(34)&" list.txt') do ("
  29.       objtext.writeline "if "&chr(34)&"%k%"&chr(34)&" equ "&chr(34)&""&chr(34)&" ("
  30.       objtext.writeline "set "&chr(34)&"%%a=%%b"&chr(34)
  31.       objtext.writeline ") else ("
  32.       objtext.writeline "set "&chr(34)&"%%b=%%a"&chr(34)
  33.       objtext.writeline "))"
  34.       objtext.writeline "for %%a in (%str%) do set /p=!%%a!%k%<nul>>temp.txt"
  35.       objtext.close
  36.       wshshell.run "temp.bat",0
  37.       wscript.sleep 1000
  38.       set objtext=objfso.opentextfile("temp.txt",1)
  39.       stroutput=objtext.readall
  40.       objtext.close
  41.       objie.navigate("about:blank")
  42.       objie.document.parentwindow.clipboarddata.setdata "text", stroutput
  43.       objie.quit
  44.       wshshell.popup stroutput,2,"转译结果"
  45.       objfso.deletefile("temp.bat")
  46.       objfso.deletefile("temp.txt")
  47.       set objfo=nothing
  48.       set objie=nothing
  49.       set swshshell=nothing  
  50.       end if
  51.    end if
  52. loop
复制代码
注:转译的时间长是因为防出错加入了wscript.sleep 1000,你可以修改这个1000的值来加快速度
***共同提高***

TOP

看过《风声》了,开始是兴奋,中途是愤怒,最后是无限的感动,真的被感动了... ...
于是我也努力写了摩尔斯密码的vbs版,纪念下这部经典国产影片,和女主角--晓梦... ..
由于把母本整合进了脚本,所以直接发附件。
1

评分人数

    • batman: 为爱国情怀叫好加分!PB + 20

TOP

用到call不好意思

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('type homebook.txt') do set/a h+=1&set s!h!=%%j
:hom
set/p str=str:
echo !time!
set str=!str:-= !
for %%i in (!str!) do (set/a s+=1
if !s!==1 set/a h="(%%i-1)*13"
if !s!==2 set/a h+=%%i+2
if !s!==3 set/a l="(%%i-1)*4*2"
if !s!==4 (set/a l+=%%i*2-1&call set/p=%%s!h!:~!l!,1%%<nul
set/a s=0,h=0,l=0))
echo.&echo.!time!&goto hom

原密文:
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
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

[ 本帖最后由 qwd 于 2009-11-28 04:03 编辑 ]

TOP

这样是否能再提速点
加密:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s1=我想他肯定知道这个地方有段好难走的路"
  3. set "s2=当敌人冲过来后你就拉响前面的警报行"
  4. for /l %%a in (1,1,2) do (
  5.     set /a "m=8189,x=0,l=0"
  6.     for /l %%b in (1,1,14) do (
  7.         set /a "l=(m+x)/2"
  8.         for %%i in (!l!) do if "!s%%a:~%%i!" equ "" (set /a m=l) else set /a x=l
  9.     )
  10.         set /a "_l%%a=l"
  11.         for /l %%b in (0,1,!l!) do set str=!str! !s%%a:~%%b,1!
  12.     )
  13.         for /f "tokens=1-18 delims=:-" %%a in ('findstr /nr "%str%" homebooka.txt') do (
  14.         set /a a=%%a/14+1,n=-1
  15.         for %%v in (%%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r) do (
  16.                 set /a "n+=1,c=n%%21/4+1,d=n%%4+1"
  17.                 if "!str:%%v=!" neq "!str!" if not defined %%v set "%%v=!a!-%%b-!c!-!d!"
  18.             )
  19.     )
  20.         for /l %%a in (1,1,2) do (
  21.             set "var="
  22.             for /l %%b in (0,1,!_l%%a!) do for %%c in ("!s%%a:~%%b,1!") do set "var=!var! !%%~c!"
  23.             echo 原文:!s%%a!
  24.             echo 密文:!var!
  25.      )
  26. pause
复制代码
解密:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "s1=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"
  3. set "s2=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"
  4. for /l %%a in (1,1,2) do (
  5.     for %%b in (!s%%a!) do (
  6.         for /f "tokens=1-4 delims=- " %%i in ("%%b") do (
  7.             set %%i-%%j=i&set "%%b=j"
  8.     )))
  9.     for /f "tokens=1-18 delims=:-        " %%a in ('findstr /nr ":" homebooka.txt') do (
  10.         set /a a=%%a/14+1,n=-1
  11.         if defined !a!-%%b (
  12.         for %%v in (%%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q %%r) do (
  13.                 set /a "n+=1,c=n%%21/4+1,d=n%%4+1"
  14.                 if defined !a!-%%b-!c!-!d! set "!a!-%%b-!c!-!d!=%%v"
  15.            )
  16.     )
  17. )
  18.      for /l %%a in (1,1,2) do (
  19.          set "var="
  20.          for %%b in (!s%%a!) do set "var=!var!!%%b!"
  21.              echo 原文:!s%%a!
  22.              echo 密文:!var!
  23.     )
  24. pause
复制代码
1

评分人数

    • batman: 好,只是晚到了点PB + 40

TOP

回复 37楼 的帖子

高手一出手,就知有没有,terse的代码一直有着简洁高效的特点,学习了。

但加密时,各字之间完全可以真接用空格格开,就不用折半法来判断字符长度了。
***共同提高***

TOP

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

TOP

返回列表