Board logo

标题: [其他] 维热纳尔方阵批处理结合base64给文本文件加密 [打印本页]

作者: 随风    时间: 2009-5-25 12:15     标题: 维热纳尔方阵批处理结合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
复制代码

作者: Batcher    时间: 2009-5-25 12:53

批处理版Base64编码
http://bbs.bathome.net/thread-587-1-1.html
作者: stuqx    时间: 2009-5-25 13:20

嘿嘿  这个有意思!!  一会玩玩看

另外 我在114la上下载的VBS版的base64加密解密

还有在BAIDU找的维热纳尔方阵密码在不知道密钥的情况下解密
看那解密方法挺复杂的,不知道用BAT怎么写,就把原文发上来看一下
  1.   不过,也是在19世纪,查尔斯·巴比奇---一个性情古怪的天才将其破译了。让我们来看看解密的过程:
  2.   首先,破译的第一步就是寻找密文中出现超过一次的字母。有两种情况可能导致这样的重复发生。最有可能的是明文中同样的字母序列使用密钥中同样的字母加了密;另外还有一种较小的可能性是明文中两个不同的字母序列通过密钥中不同部分加了密,碰巧都变成了密文中完全一样的序列。假如我们限制在长序列的范围内,那么第二种可能性可以很大程序地被排除,这种情况下,我们多数考虑到4个字母或4个以上的重复序列。
  3.   破译的第二步是确定密钥的长度,又看看这一段先:
  4.   关键词 F O R E S T F O R E S T F O R E S T F O R E S T F O R
  5.   明 文 b e t t e r t o d o w e l l t h a n t o s a y w e l l
  6.   密 文 G S K X W K Y C U S O X Q Z K L S G Y C J E Q P J Z C
  7.   第一个YC出现后到第二个YC的结尾一共有12个字母(U S O X Q Z K L S G Y C)
  8.   那么密钥的长度应是12的约数---1,2,3,4,6,12之中的一个(其中,1可排除)。
  9.   如下面的密文:
  10.   I S W Z P N Q C K M Y Y Y J K A Y Y E Z F F S W E E S S P G Z X Q A H F
  11.   I S W Z P N Q C K M T V Y J O A C V E H A E S A Z R L T P Q I Z M X O T
  12.   Q S W M C V U D S I J G G D E U W A Z R S F X W I L K U E J Q L D A C B
  13.   G D L Y J X M Y L M D Q K Z M P L D I L Q E M W F S W D P A Z E Z Q N W
  14.   D Y W D Z X F S A E E A Z J D U E L V P T M C E K W S E E F U R Z F S W
  15.   D P X A C Q A F K M X W A W V E Z F S D B G D L A Y U Q X G D P E K W S
  16.   E E F U R Z F S W D P O U E Z K Z M Y L Q N P Q Q D E M J T Q Y G U V A
  17.   Z O G R W A W P V U E Q A F J Q J G G C O M J Z A H Q A F K T J D K A D
  18.   M N W P J G G C W K P K A Y E Q Z Z P T V K Z M Q G W D V F A H L T L L
  19.   U S S P X A Z P G Z J G G O S D W A Z R K A E Z Q C W K Z M M C W I T L
  20.   T E Z M E D A Z C A Y Q A F J R L U Q L K U Q Q A F J Q Y W H P J T F J
  21.   F L K U Q Q A F J Q Y W H P J P Z O Z D Z M W D U M W F S W A Y W R Z J
  22.   K Z M I S G B T F O S E E J G G D G R E D K M M F D M D P A R Q J A H F
  23.   U D K T Z O Z E Z Q Y A I T D X V F A H L T L L K Z M M C W Z Z V D P S
  24.   Y P J
  25.   在里面重复序列有I S W Z P N Q C K M,B G D L,S E E F U R Z F S W D P,
  26.   J G G C,L K U Q Q A F J Q Y W H P J,V F A H L T L L等;
  27.   如果每个重复间隔都能被3整除,关键词应该有三个字母。
  28.   下一步,仍旧是频率分析,不过,因为关键词有三个字母,我们应分为三组进行。把第1, 4,7,10,13......个字母分为一组,称之为L1,把第2,5,8,11,14......个字母又分为一组,称之为L2,余下的归另一组,称之为L3。那么每一组有169个字母。
  29.   现在先做一个标准频率分布表:
  30.   用169乘以各个字母的标准百分比,如字母A,169*8.2%=14。
  31.   那么由标准频率:
  32.   A:8.2 N:6.7
  33.   B:1.5 O:7.5
  34.   C:2.8 P:1.9
  35.   D:4.3 Q:0.1
  36.   E:12.7 R:6.0
  37.   F:2.2 S:6.3
  38.   G:2.0 T:9.1
  39.   H:6.1 U:2.8
  40.   I:7.0 V:1.0
  41.   J:0.2 W:2.4
  42.   K:0.8 X:0.2
  43.   L:4.0 Y:2.0
  44.   M:2.4 Z:0.1
  45.   得到标准个数:
  46.   A:14 N:11
  47.   B:3 O:13
  48.   C:5 P:3
  49.   D:7 Q:0
  50.   E:21 R:10
  51.   F:4 S:11
  52.   G:3 T:15
  53.   H:10 U:5
  54.   I:12 V:2
  55.   J:0 W:4
  56.   K:1 X:0
  57.   L:7 Y:3
  58.   M:4 Z:0
  59.   然后,统计L1的169个字母出现的次数,有:
  60.   A:22 N:1
  61.   B:1 O:1
  62.   C:0 P:5
  63.   D:10 Q:16
  64.   E:10 R:5
  65.   F:9 S:2
  66.   G:7 T:7
  67.   H:2 U:14
  68.   I:9 V:1
  69.   J:0 W:1
  70.   K:11 X:2
  71.   L:0 Y:5
  72.   M:14 Z:14
  73.   又作出L1的图表(histogram),与标准图表对比一下。标准频率和L1的频率都有峰值,平稳期和低谷。它们之间的区别在于相互错开了一些位置,比较两者应该可以寻找出最显著的特征。例如,看L1图表中A-F这一段,A的峰值过后是低谷,特别是C没有出现,然后是一段平稳期,这与标准频率中的O-T这一段相像;标准频率中,O的前面I-N这一段和L1中U-Z一段也大致吻合;又看看,L1中,J和L的缺失应该就是标准频率中X和Z的缺失,M-Q这一段应就是标准频率中A-E这一段。这就暗示着L1的密码表是由M,N,O,P......开始的。把L1的图表向左平移12个单位再与标准频率对比,整体来说差不多。由此可知,关键词的第一个字母是M。(注意,一些误差是在所难免的,如K替换Y,两图表比较起来好像不很符合,但整体来说是差不多的,我们就可忽略过去。)
  74.   继续下来,统计L2中169个字母出现的次数,可以确定关键词的第二个字母是L。
  75.   最后,用同样的方法可确定关键词的第三个字母是S。
  76.   至此,得到整个关键词是MLS。
  77.   再用维热纳尔方阵将密文翻译过来,得到明文:
  78.   Whenever sang my songs
  79.   On the stage on my own
  80.   Whenever said my words
  81.   Wishing they would be heard
  82.   I saw you smiling at me
  83.   Was it real or just my fantasy
  84.   You'd always be there in the corner
  85.   Of this tiny little bar
  86.   My last night here for you
  87.   Same old songs just once more
  88.   My last night here with you
  89.   Maybe yes maybe no
  90.   I kind of liked it you're your way
  91.   How you shyly placed your eyes on me
  92.   Oh did you ever know
  93.   That I had mine on you
  94.   Darling so there you are
  95.   With that look on your face
  96.   As if you're never hurt
  97.   As if you're never down
  98.   Shall I be the one for you
  99.   Who pinches you softly but sure
  100.   If frown is shown then
  101.   I will know that you are no dreamer
  102.   现在再说说一些技巧:
  103.   1.A-E段,U-Z段以及O-T段的特征比较显著,可先从这些方面着手;
  104.   2.如果一些字符串出现的频率较多,不妨猜猜,特别要注意THE,-ING等的出现;
  105.   3.要留意那些图表中没有出现的字母,很多时候也会是突破点,如X与Z的空缺;
  106.   4.图表最好还是做一下,毕竟比较直观,好看。
复制代码

作者: 6589600    时间: 2009-5-25 19:17

很深奥,我的慢慢琢磨下




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2