标题: [小游戏]大家来解密批处理加密密码
[打印本页]
作者: everest79
时间: 2006-12-31 18:05
标题: [小游戏]大家来解密批处理加密密码
参考资料
[url= http://www.cn-dos.net/forum/viewthread.php?tid=19819&fpage=1&highlight=%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%95%BF%E5%BA%A6][讨论][NT]计算字符串长度批处理代码查错[/url]
呵呵,看谁能算出来密码
最后一行就是密码,你可以删除这一行后执行就能建立自已的密码了
@ECHO OFF
:TOP
SETLOCAL ENABLEDELAYEDEXPANSION
SET A_X=9
SET B_Y=9
SET C_Z=9
SET BOOT=1
SET BASE=%RANDOM%
CALL :CRY
IF NOT "%CRY%" == "" SET BOOT=0&&CALL :IN
SET DIC=abcdefghijklmnopqrstuvwxyz0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ
CALL :LOS %DIC%
SET DL=%LOS%&&SET /A IDE=%LOS%%%9
IF %LOS% GTR 120 CLS&&ECHO 字典超长....&&GOTO END
IF NOT "%IDE%" == "0" ECHO 字典设置错误&&GOTO END
:inp
IF "%BOOT%" == "1" (
SET MSG0=开始创建新密码...&&SET MSG=请输入新密码&&SET MSG9=密码创建中.
) ELSE SET MSG0=本文档存在密码保护...&&SET MSG=请输入&&SET MSG9=密码验证中.
ECHO.
ECHO 密码字典为(密码长度不能超过40位,字典长度不超过120位):&&ECHO %DIC%
ECHO 对大小字敏感,不能设置除字典外的字符或空格&&ECHO.
ECHO %MSG0%
:inp1
SET /P PWS="%MSG% PWS:>"
ECHO %PWS%|findstr /r "[^%DIC%]">nul&&GOTO INP
IF "%BOOT%" == "1" (
SET /P FWS="再输入一次 PWS:>"
IF NOT "%PWS%" == "!FWS!" (
SET MSG=两次输入不同 请输入新密码
GOTO INP1)
)
SET/P=%MSG9%<nul
CALL :LOS %PWS%
SET PL=%LOS%&&IF %LOS% GTR 40 ECHO 密码长度不能越过40&&pause&&CLS&&GOTO TOP
SET NPL=%PL%
:calc
IF %NPL% GEQ %DL% SET /A NPL=%NPL%-%DL%&&GOTO CAL
SET /A HPL=%DL%-%NPL%
CALL :CONVERSE 0 %NPL% %NPL% %HPL%
CALL :CONVERSE -%NPL% %NPL% 0 -%NPL%
SET /A HDL=(%DL%-%DL%%%2)/2
SET ADL=!NDIC:~0,%HDL%!&&SET BDL=!NDIC:~%HDL%!&&SET NDIC=
FOR /L %%i IN (0,1,%HDL%) DO SET NDIC=!NDIC!!BDL:~%%i,1!!ADL:~%%i,1!
FOR /L %%z IN (0,1,%C_Z%) DO (
FOR /L %%y IN (0,1,%B_Y%) DO (
FOR /L %%x IN (0,1,%A_X%) DO (
SET /a WD=1%%x%%y%%z%%%DL%
CALL :TEXT !WD!
SET _d_%%x%%y%%z=!TEXT!)
)
SET/P=.<nul)
::set _d_>1.txt&&goto chk
:create
FOR /L %%i IN (0,1,%NNPL%) DO (
FOR /F "tokens=2,3 delims=_=" %%a IN ('SET _d_^|find "=!PWS:~%%i,1!"') DO (
SET /A FF=!FF!+1
SET S!FF!=%%a
)
SET /A CF=%BASE%%%!FF!+1
CALL :OUT !CF!
SET/P=.<nul)
SET NCRY=%BASE%-%JG%
IF "%BOOT%" == "1" (
ECHO.>>"%~dpnx0"&&ECHO SET CRY=%NCRY%>>"%~dpnx0"
ECHO 密码设置成功
GOTO END
) ELSE IF "%NCRY%" == "%BASE%-%CRY%" (
ECHO 验证成功&&GOTO NEXT
) ELSE (
ECHO 密码错误&&pause&&GOTO ENDSET)
GOTO END
:los
SET STR=%1
FOR /L %%i IN (0,1,128) DO if "!STR:~%%i,1!" == "" SET LOS=%%i&&GOTO :EOF
GOTO :EOF
:text
SET TEXT=!NDIC:~%1,1!
GOTO :EOF
:converse
SET /A NNPL=%NPL%-1
SET _tmp2=
SET _tmp1=!DIC:~%1,%2!
FOR /L %%i IN (%NNPL%,-1,0) DO SET _tmp2=!_tmp2!!_tmp1:~%%i,1!
SET NDIC=%_tmp2%!DIC:~%3,%4!
GOTO :EOF
:out
SET JG=!JG!!S%1!&&SET FF=
GOTO :EOF
:in
FOR /F "tokens=1,2 delims=-" %%i IN ("%CRY%") DO SET BASE=%%i&&SET CRY=%%j
CALL :LOS %CRY%
SET HCRY=%LOS%&&SET /A CHK=%LOS%%%3
IF NOT "%CHK%" == "0" ECHO 密文被破坏!&&GOTO END
GOTO :EOF
:endset
ENDLOCAL&cls
GOTO TOP
:next
ECHO OK..
GOTO END
:chk
::check label:calc matrix
for /l %%j in (0,1,62) do (
set /a sh=0
for /f "tokens=2 delims==" %%i in (1.txt) do (
if "!DIC:~%%j,1!" == "%%i" set /a sh=!sh!+1)
echo !DIC:~%%j,1! !sh! >>sh.txt)
:end
rem copyright:12232-530502-12000-046006035061035000002030034
PAUSE>nul
EXIT
:cry
::SET /A NDL=%DL%-1
::FOR /L %%i IN (0,1,%NDL%) DO ECHO %PWS%|find "!NDIC:~%%i,1!">nul&&SET BIY=!BIY!!NDIC:~%%i,1!
SET CRY=7304-552511527557551535939937543939547
[
Last edited by everest79 on 2006-12-31 at 05:06 AM ]
作者: everest79
时间: 2006-12-31 23:56
没人看?
作者: tghksj
时间: 2007-1-1 04:28
%RANDOM%
怎么可能被反算???
难道反向枚举?????
作者: Michale
时间: 2007-1-1 05:04
试试看~~
作者: everest79
时间: 2007-1-1 23:13
Quote: |
Originally posted by tghksj at 2006-12-31 03:28 PM:
%RANDOM%
怎么可能被反算???
难道反向枚举????? |
|
当密码存在时,所赋的%random%被替换了仔细看下IN这一段
作者: everest79
时间: 2007-1-1 23:16
Quote: |
Originally posted by Michale at 2006-12-31 04:04 PM:
试试看~~ |
|
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间
作者: everest79
时间: 2007-1-2 01:03
密码为
DOSlianmeng
这个加密最大的漏洞就是密码长度是计算的关键,只要枚举1-40的密码长度就可以得到加密矩阵,然后反查密文,每三位一段就可以获取密码了
作者: qzwqzw
时间: 2007-1-2 01:47
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算法解密不需要密钥也降低了安全性
[
Last edited by qzwqzw on 2007-1-1 at 12:56 PM ]
作者: everest79
时间: 2007-1-2 06:46
Quote: |
Originally posted by qzwqzw at 2007-1-1 12:47 PM:
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算 ... |
|
这几天一直在想这个加密如何能在不需较长时间下进行深层计算,贴出来也就是希望大家能有自已的看法
设想的应用对像就是加密批处理自身,其实也不能算真正的加密,因为不可能做到加密标准的一体三分,只不过多设一个坎,增加一点难度的同时再多点趣味性
作者: 0401
时间: 2007-1-3 08:24
解密的P处理。直接拷贝楼主你的代码,拼凑而成。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET A_X=9
SET B_Y=9
SET C_Z=9
SET DIC=abcdefghijklmnopqrstuvwxyz0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ
set error= 密文格式错误。
CALL :LOS %DIC%
SET DL=%LOS%
cls
:TOP
set NCRY=
set/p NCRY=请输入密文:
if not defined NCRY goto :top
for /f "tokens=1,2 delims=-" %%i in ("%NCRY%") do set BASE=%%i&set JG=%%j
if not defined BASE echo %error% & goto :top
if not defined JG echo %error% & goto :top
call :los %JG%
set/a NPL=%LOS%/3
set/a MPL=%LOS%%%3
if not %MPL%==0 echo %error% & goto :top
SET /A HPL=%DL%-%NPL%
CALL :CONVERSE -%NPL% %NPL% 0 -%NPL%
SET /A HDL=(%DL%-%DL%%%2)/2
SET ADL=!NDIC:~0,%HDL%!&&SET BDL=!NDIC:~%HDL%!&&SET NDIC=
FOR /L %%i IN (0,1,%HDL%) DO SET NDIC=!NDIC!!BDL:~%%i,1!!ADL:~%%i,1!
FOR /L %%z IN (0,1,%C_Z%) DO (
FOR /L %%y IN (0,1,%B_Y%) DO (
FOR /L %%x IN (0,1,%A_X%) DO (
SET /a WD=1%%x%%y%%z%%%DL%
CALL :TEXT !WD!
SET _d_%%x%%y%%z=!TEXT!)
)
SET/P=.<nul)
set /a enpl=nnpl*3
echo.密码为:
for /l %%i in (0,3,!enpl!) do (
for /f "tokens=2 delims==" %%j in ('set _d_^|find "!JG:~%%i,3!"') do (
set/p=%%j<nul
)
)
echo. & pause>nul
EXIT/B
:converse
SET /A NNPL=%NPL%-1
SET _tmp2=
SET _tmp1=!DIC:~%1,%2!
FOR /L %%i IN (%NNPL%,-1,0) DO SET _tmp2=!_tmp2!!_tmp1:~%%i,1!
SET NDIC=%_tmp2%!DIC:~%3,%4!
GOTO :EOF
:text
SET TEXT=!NDIC:~%1,1!
GOTO :EOF
:los
SET STR=%1
FOR /L %%i IN (0,1,128) DO if "!STR:~%%i,1!" == "" SET LOS=%%i&&GOTO :EOF
GOTO :EOF
[
Last edited by 0401 on 2007-1-3 at 08:27 AM ]
作者: 0401
时间: 2007-1-3 08:32
Quote: |
Originally posted by everest79 at 2007-1-1 23:16:
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间 |
|
楼主能将完整的贴一份吗?