|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
  『楼 主』:
[小游戏]大家来解密批处理加密密码
使用 LLM 解释/回答一下
参考资料
计算字符串长度批处理代码查错
呵呵,看谁能算出来密码
最后一行就是密码,你可以删除这一行后执行就能建立自已的密码了
@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 "">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 ]
### Reference Materials
Batch Code for Calculating String Length to Check for Errors
Hehe, see who can figure out the password. The last line is the password. You can delete this line and then execute it to create your own password.
@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 Dictionary too long....&&GOTO END
IF NOT "%IDE%" == "0" ECHO Dictionary setting error&&GOTO END
:inp
IF "%BOOT%" == "1" (
SET MSG0=Start creating new password...&&SET MSG=Please enter new password&&SET MSG9=Creating password.
) ELSE SET MSG0=This document has password protection...&&SET MSG=Please enter&&SET MSG9=Verifying password.
ECHO.
ECHO Password dictionary (password length cannot exceed 40 characters, dictionary length not exceed 120 characters):&&ECHO %DIC%
ECHO Case-sensitive, cannot set characters or spaces other than in the dictionary&&ECHO.
ECHO %MSG0%
:inp1
SET /P PWS="%MSG% PWS:>"
ECHO %PWS%|findstr /r "">nul&&GOTO INP
IF "%BOOT%" == "1" (
SET /P FWS="Enter again PWS:>"
IF NOT "%PWS%" == "!FWS!" (
SET MSG=The two entries are different. Please enter new password
GOTO INP1)
)
SET/P=%MSG9%<nul
CALL :LOS %PWS%
SET PL=%LOS%&&IF %LOS% GTR 40 ECHO Password length cannot exceed 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 Password set successfully
GOTO END
) ELSE IF "%NCRY%" == "%BASE%-%CRY%" (
ECHO Verification successful&&GOTO NEXT
) ELSE (
ECHO Password error&&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 Ciphertext damaged!&&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 ]
此帖被 +17 点积分 点击查看详情 评分人:【 redtek 】 | 分数: +7 | 时间:2007-1-1 00:07 | 评分人:【 qzwqzw 】 | 分数: +8 | 时间:2007-1-2 01:38 | 评分人:【 0401 】 | 分数: +2 | 时间:2007-1-3 08:30 |
|
|
|
2006-12-31 18:05 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2006-12-31 23:56 |
|
|
tghksj
社区乞丐
此图片另存后死机
积分 -49
发帖 90
注册 2006-12-2
状态 离线
|
『第 3 楼』:
使用 LLM 解释/回答一下
%RANDOM%
怎么可能被反算???
难道反向枚举?????
%RANDOM%
How is it possible to be reversed calculated???
Is it reverse enumeration????
|

我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img] |
|
2007-1-1 04:28 |
|
|
Michale
初级用户
 
积分 52
发帖 27
注册 2006-10-6 来自 ☆逍遥宫☆
状态 离线
|
|
2007-1-1 05:04 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 5 楼』:
使用 LLM 解释/回答一下
Originally posted by tghksj at 2006-12-31 03:28 PM:
%RANDOM%
怎么可能被反算???
难道反向枚举?????
当密码存在时,所赋的%random%被替换了仔细看下IN这一段
Originally posted by tghksj at 2006-12-31 03:28 PM:
%RANDOM%
How is it possible to be reversed?
Is it reverse enumeration?????
When the password exists, the assigned %random% is replaced. Take a closer look at the IN section
|
|
2007-1-1 23:13 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 6 楼』:
使用 LLM 解释/回答一下
Originally posted by Michale at 2006-12-31 04:04 PM:
试试看~~
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间
Originally posted by Michale at 2006-12-31 04:04 PM:
Let's try~~
Come on, this password can indeed be calculated by a very simple method
Because of the calculation time issue, I deleted one part of the encryption, otherwise it would take a lot of time
|
|
2007-1-1 23:16 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 7 楼』:
使用 LLM 解释/回答一下
密码为
DOSlianmeng
这个加密最大的漏洞就是密码长度是计算的关键,只要枚举1-40的密码长度就可以得到加密矩阵,然后反查密文,每三位一段就可以获取密码了
The password is
DOSlianmeng
The biggest loophole in this encryption is that the password length is the key to calculation. As long as you enumerate password lengths from 1 to 40, you can obtain the encryption matrix, then reverse look up the ciphertext, and divide it into segments of three characters each to get the password.
|
|
2007-1-2 01:03 |
|
|
qzwqzw
银牌会员
     天的白色影子
积分 2343
发帖 636
注册 2004-3-6
状态 离线
|
『第 8 楼』:
使用 LLM 解释/回答一下
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算法解密不需要密钥也降低了安全性
Last edited by qzwqzw on 2007-1-1 at 12:56 PM ]
The theoretical value is very high, but the practical value is not high.
Batch processing code is very easy to be modified, so it is not suitable for use as a password verification program.
It can indeed be used for text encryption, but the efficiency is worrying.
Moreover, the fact that this algorithm does not require a key for decryption also reduces security.
Last edited by qzwqzw on 2007-1-1 at 12:56 PM ]
|
|
2007-1-2 01:47 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 9 楼』:
使用 LLM 解释/回答一下
Originally posted by qzwqzw at 2007-1-1 12:47 PM:
理论价值很高,实用价值不高
批处理代码很容易被修改,所以不适于用作口令验证程序
倒是可以用于文本的加密,只是效率让人担心
而且此算 ...
这几天一直在想这个加密如何能在不需较长时间下进行深层计算,贴出来也就是希望大家能有自已的看法
设想的应用对像就是加密批处理自身,其实也不能算真正的加密,因为不可能做到加密标准的一体三分,只不过多设一个坎,增加一点难度的同时再多点趣味性
Originally posted by qzwqzw at 2007-1-1 12:47 PM:
Theoretical value is very high, but practical value is not high
Batch processing code is easy to be modified, so it is not suitable for use as a password verification program
It can be used for text encryption, but the efficiency is worrying
And this calculation ...
These days I've been thinking about how this encryption can perform deep calculations without taking a long time. I post it just hoping everyone can have their own opinions. The envisioned application object is to encrypt the batch processing itself. Actually, it can't be regarded as real encryption because it's impossible to achieve the one-into-three integration of encryption standards. It's just setting an additional hurdle, increasing a bit of difficulty while adding more fun at the same time
|
|
2007-1-2 06:46 |
|
|
0401
中级用户
   带走
积分 435
发帖 88
注册 2005-9-24
状态 离线
|
『第 10 楼』:
使用 LLM 解释/回答一下
解密的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 ]
Decryption P processing. Directly copied from the building block code of the original poster.
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET A_X=9
SET B_Y=9
SET C_Z=9
SET DIC=abcdefghijklmnopqrstuvwxyz0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ
set error= Incorrect ciphertext format.
CALL :LOS %DIC%
SET DL=%LOS%
cls
:TOP
set NCRY=
set/p NCRY=Please enter ciphertext:
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.Password is:
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 ]
|
|
2007-1-3 08:24 |
|
|
0401
中级用户
   带走
积分 435
发帖 88
注册 2005-9-24
状态 离线
|
『第 11 楼』:
使用 LLM 解释/回答一下
Originally posted by everest79 at 2007-1-1 23:16:
加油呀,这个密码的确是可以通过很简单的方法就算出来的
因为计算时间问题,其中一段加密我给删掉了,要不然很耗时间
楼主能将完整的贴一份吗?
Originally posted by everest79 at 2007-1-1 23:16:
Come on, this password can indeed be calculated through a very simple method
Because of the calculation time issue, I deleted one part of the encryption, otherwise it would take a lot of time
Can the owner of the post post the complete version?
|
|
2007-1-3 08:32 |
|
|