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

[其他] 维热纳尔方阵批处理结合base64给文本文件加密

维热纳尔方阵结合base64给文本文件加密
 
思路:
 base64 可以把任意文本文件转换成只有字母、数字、及+/= 字符的文本
 再用维热纳尔方阵加密法对文本进行加密。
 
提示:
 暂时不知道在忘记密匙的情况下如何解密,如有知道的欢迎给出破解方案
 密匙字符可包含字母(区分大小写)、数字及@#$符号
 代码需要base64.exe支持,会产生一个文件名为 tem 的临时文件。
 加密后的文件理论上会比源文件大三分之一左右。
 因为是逐字判断,所以效率很低,不知能不能用第三方工具提高点效率。
 
:
  1. @echo off&setlocal enabledelayedexpansion
  2. :: @随风 @bbs.bathome.net @2009-05-23
  3. base64.exe -i "%~s0">nul 2>nul||(
  4.    cls&echo/&echo  请先下载 base64.exe 文件
  5.    echo/&pause&exit
  6. )
  7. set "x=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$"
  8. set "code=!x!"
  9. for /l %%a in (1 1 65) do (
  10.    if %%a leq 26 (
  11.       set /a .D!x:~0,1!=%%a&set ".DD!x:~0,1!=!x:~0,1!"
  12.     ) else set /a .!x:~0,1!=%%a
  13.    set "x=!x:~1!"
  14. )
  15. :xuanz1
  16. if "%~1"=="" (
  17.    echo=&echo  请输入文件名完整路径或拖放文件来此
  18.    echo=&set wjm=&set /p wjm=
  19.    if defined wjm set "wjm=!wjm:"=!"
  20.    if not exist "!wjm!" cls&goto xuanz1
  21. ) else set "wjm=%~1"
  22. set "lj=%~dp0"
  23. for /f "delims=" %%a in ("!wjm!") do set "wjm_=%%~na"
  24. :miy
  25. cls&echo/
  26. echo  请输入密匙,密匙可包含字母、数字及 @ # $ 这三个符号,字母区分大小写
  27. echo=&set "miy="&set /p miy=
  28. if not defined miy cls&goto miy
  29. :xuanz
  30. cls&echo/&echo  请选择 1 加密 2 解密
  31. echo=&set xuanz=&set /p xuanz=
  32. if "!xuanz!" equ "1" (set "wjm2=!wjm_! 密文.txt"&call :jiami) else (
  33.   if "!xuanz!" equ "2" (set "wjm2=!wjm_! 明文.txt"&call :jiemi) else cls&goto xuanz
  34. )
  35. exit
  36. :jiemi 解密维热纳尔方阵还原为base64码
  37. setlocal&cls&set miy_=&echo=
  38. echo  正在解密 !wjm! 文件,请稍候。。。
  39. (for /f "usebackq delims=" %%a in ("!wjm!") do (
  40.    set "miw1=%%a"&set "miw2="&set "minwen="
  41.    for /l %%i in (0 1 63) do (
  42.       if not "!miw1:~%%i,1!"=="" set miw2=!miw2! !miw1:~%%i,1!
  43.     )
  44.    for %%i in (!miw2!) do (
  45.       if not defined miy_ set "miy_=!miy!"
  46.       if "%%i"=="!.DD%%i!" (set /a w1=!.D%%i!) else set /a w1=!.%%i!
  47.       set "miy2=!miy_:~0,1!"
  48.       for %%j in (!miy2!) do (
  49.         if "%%j"=="!.DD%%j!" (set /a w2=.D%%j) else set /a w2=.%%j
  50.       )
  51.       set /a w3=w1-w2
  52.       for %%j in (!w3!) do set minwen=!minwen!!code:~%%j,1!
  53.       if "!minwen:~-1!"=="$" set "minwen=!minwen:~0,-1!="
  54.       if "!minwen:~-2,1!"=="$" set "minwen=!minwen:~0,-2!=!minwen:~-1!"
  55.       set "minwen=!minwen:@=+!"&set "minwen=!minwen:#=/!"
  56.       set "miy_=!miy_:~1!"
  57.     )
  58.     (echo !minwen!)
  59. ))>"!lj!tem"
  60. base64.exe -d !lj!tem"">"!lj!!wjm2!"
  61. del/q "!lj!tem"&start "" "!lj!!wjm2!"
  62. endlocal&goto :EOF
  63. :jiami 用维热纳尔方阵给base64码文本加密
  64. setlocal&cls&set miy_=&echo=
  65. echo  正在加密 !wjm! 文件,请稍候。。。
  66. base64.exe -i "!wjm!">"!lj!tem"
  67. (for /f "usebackq delims=" %%a in ("!lj!tem") do (
  68.    set "miw1=%%a"&set miw1=!miw1:+=@!
  69.    set miw1=!miw1:/=#!&set miwen=&set "miw2="
  70.    if "!miw1:~-1,1!"=="=" set "miw1=!miw1:~0,-1!$"
  71.    if "!miw1:~-2,1!"=="=" set "miw1=!miw1:~0,-2!$!miw1:~-1!"
  72.    for /l %%i in (0 1 63) do (
  73.       if not "!miw1:~%%i,1!"=="" set miw2=!miw2! !miw1:~%%i,1!
  74.     )
  75.    for %%i in (!miw2!) do (
  76.       if not defined miy_ set "miy_=!miy!"
  77.       if "%%i"=="!.DD%%i!" (set /a w1=!.D%%i!) else set /a w1=!.%%i!
  78.       set "miy2=!miy_:~0,1!"
  79.       for %%j in (!miy2!) do (
  80.         if "%%j"=="!.DD%%j!" (set /a w2=.D%%j) else set /a w2=.%%j
  81.        )
  82.       set /a w3=^(w1+w2-2^)%%65
  83.       for %%w in (!w3!) do set "miwen=!miwen!!code:~%%w,1!"
  84.       set "miy_=!miy_:~1!"
  85.     )
  86.     (echo !miwen!)
  87. ))>"!lj!!wjm2!"
  88. del/q "!lj!tem"&start "" "!lj!!wjm2!"
  89. endlocal&goto :EOF
复制代码
技术问题请到论坛发帖求助!

返回列表