返回列表 发帖

回复 30楼 的帖子

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

TOP

我的方法再提提速速

@echo off&setlocal enabledelayedexpansion
set sati=!time!
set Ban=0
for /f "tokens=* delims=*" %%a in (homebook.txt) do (
        set str=%%a
        if "!str:~-1!" equ "版" (set /a Ban+=1) else (
                for /f "tokens=1,2,*" %%b in ("!ban! !str:-=!") do (set Ban%%b=!Ban%%b!%%d@)
        )
)
::前面读取母本到变量
for /f "tokens=*" %%a in (密文.txt) do (
        set 原文=
        for %%b in (%%a) do (
                for /f "tokens=1-4 delims=-" %%1 in ("%%b") do (
                        for /f "tokens=1-10 delims=@" %%0 in ("!Ban%%1!") do (
                                set vv=1%%02%%13%%24%%35%%46%%57%%68%%79%%810%%9
                        )
                        for /f "tokens=1-5" %%0 in ("!vv:*%%2=!") do (
                                set vv=1%%02%%13%%24%%35%%4
                        )
                        set "str=@!vv:*%%3=!"
                        set 原文=!原文!!str:~%%4,1!
                )
        )
        echo;!原文!
)
::解密
echo;!sati!
echo;!time!
set sati=!time!
for /f "tokens=*" %%a in (原文.txt) do (
        set sour=%%a
        set/a z=8180,x=0,y=0
        for /l %%a in (1,1,14) do (set/a "y=(z-x)/2+x"
            for %%b in (!y!) do if "!sour:~%%b,1!" equ "" (set/a z=y) else (set/a x=y)
        )
        set 密文=
        echo !sour! [!x!]
        for /l %%b in (0,1,!x!) do (
                for %%c in ("!sour:~%%b,1!") do (
                        for /l %%d in (1,1,!ban!) do (
                                if "!Ban%%d:%%~c=!" neq "!Ban%%d!" set str=!Ban%%d!&set zban=%%d
                        )
                        for /f "tokens=1-10 delims=@" %%0 in ("!str!") do (
                                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@
                        )
                        for /f "tokens=1,2 delims=@" %%0 in ("!vv:*%%~c=!") do (
                                set zhang=%%1
                                set vv=!vv:*%%1=!
                        )
                        for /f "tokens=1-5" %%0 in ("!vv!") do (
                                set vv=1%%0 @1@2%%1 @2@3%%2 @3@4%%3 @4@5%%4 @5@
                        )
                        for /f "tokens=1,2 delims=@" %%0 in ("!vv:*%%~c=!") do (
                                set zlie=%%1
                        )
                                set vv=!vv:*%%~c=!
                                set vv=!vv: =1234!
                                set zzhi=!vv:~3,1!
               
                        set 密文=!密文! !zban!-!zhang!-!zlie!-!zzhi!
                )
        )
        echo;!密文!
)
::加密
echo;!sati!
echo;!time!
pause
goto :eofCOPY

TOP

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

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

TOP

是时候把它弄出来了

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

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

可以输出结果到文本。
dim path,strinput,stroutput,counter
counter=2
do
on error resume next
if counter=1 then
   exit do
   else
   strinput=inputbox("请输入要转译的文字或编码,退出请点取消","转译工具")
   if strinput=false then
      wscript.quit
      else
      set wshshell=createobject("wscript.shell")
      path=wshshell.currentdirectory
      set objie=createobject("internetexplorer.application")
      set objfso=createobject("scripting.filesystemobject")
      set objtext=objfso.opentextfile("temp.txt",2,true)
      objtext.write strinput
      objtext.close
      set objtext=objfso.opentextfile("temp.bat",2,true)
      objtext.writeline "@echo off&setlocal enabledelayedexpansion"
      objtext.writeline "set /p input=<temp.txt&del /q temp.txt&set "&chr(34)&"k= "&chr(34)
      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"
      objtext.writeline ":lp"
      objtext.writeline "set "&chr(34)&"str=%str% %input:~,1%"&chr(34)
      objtext.writeline "set "&chr(34)&"input=%input:~1%"&chr(34)
      objtext.writeline "if defined input goto lp"
      objtext.writeline ":next"
      objtext.writeline "for /f "&chr(34)&"tokens=1,2"&chr(34)&" %%a in ('findstr /r "&chr(34)&"%str%"&chr(34)&" list.txt') do ("
      objtext.writeline "if "&chr(34)&"%k%"&chr(34)&" equ "&chr(34)&""&chr(34)&" ("
      objtext.writeline "set "&chr(34)&"%%a=%%b"&chr(34)
      objtext.writeline ") else ("
      objtext.writeline "set "&chr(34)&"%%b=%%a"&chr(34)
      objtext.writeline "))"
      objtext.writeline "for %%a in (%str%) do set /p=!%%a!%k%<nul>>temp.txt"
      objtext.close
      wshshell.run "temp.bat",0
      wscript.sleep 1000
      set objtext=objfso.opentextfile("temp.txt",1)
      stroutput=objtext.readall
      objtext.close
      objie.navigate("about:blank")
      objie.document.parentwindow.clipboarddata.setdata "text", stroutput
      objie.quit
      wshshell.popup stroutput,2,"转译结果"
      objfso.deletefile("temp.bat")
      objfso.deletefile("temp.txt")
      set objfo=nothing
      set objie=nothing
      set swshshell=nothing  
      end if
   end if
loopCOPY
注:转译的时间长是因为防出错加入了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

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

评分人数

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

TOP

回复 37楼 的帖子

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

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

TOP

自动化与手工操作的参与量,是为自己拿捏。
[url=][/url]

TOP

返回列表