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

[加密解密] 批处理版简易明文加密器

最近在做字符串的练习,练了几个就想着把几个小的给组合起来,就有了一个简易明文转换器的想法。大家一起来看看啊,欢迎提建议!!
  1. 代码更新历史:
  2.      2008.11.16  更新了密码表的产生问题,可以随机生成62个不同字符(0-9,a-z,A-Z)的密码表(感谢pusofalse的建议)!
复制代码
  1.      感谢pusofalse关于第三段中效率问题的建议,我运行了一下,效率可以提高很多,但是字母输出却全为大写字母,原因为此句   If defined .!var!   中对于.!var!的判断,小写字母和大写字母在此不区分。很好的思路,学习了。还在思考如何能兼顾效率和输出。欢迎大家提建议!再次感谢pusofalse!!
复制代码
  1. @echo off     
  2. :begin
  3. color 0e
  4. mode con cols=60 lines=26
  5. setlocal enabledelayedexpansion
  6. echo.
  7. echo                     ╭────────╮
  8. echo     ╭───────┤ 简易明文加密器 ├───────╮
  9. echo     │              ╰────────╯              │
  10. echo     │                                                │
  11. echo     │       本程序能把指定输入的字符串进行三种运算,  │
  12. echo     │                                                │
  13. echo     │  ①进行反序排列 ②对于字母大写换小写,小写换   │
  14. echo     │                                                │
  15. echo     │  大写 ③按照转换表进行对应加密。暂只支持0-9,   │
  16. echo     │                                                │
  17. echo     │  a-z,A-Z的转换。转换表每次随机产生,需要查看   │
  18. echo     │                                                │
  19. echo     │  的话请直接输入回车。                          │
  20. echo     │                                                │
  21. echo     │       此代码是我在做字符串处理的练习时偶然想   │
  22. echo     │                                                │
  23. echo     │  到的,肯定还有不足之处,大家一起来讨论!      │
  24. echo     │                                                │
  25. echo     │                              code by lhjoanna  │
  26. echo     │                                                │
  27. echo     ╰────────────────────────╯         
  28. set code=
  29. set /a m=0
  30. set /a u=0
  31. for %%i in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  32.    set /a m+=1
  33.    set  x!m!=%%i
  34. )
  35. :loop
  36.    set /a num=!random!%%62+1
  37.    if not defined _x!num! (
  38.      call set _x!num!=%%x!num!%%
  39.      call set "code=!code! %%_x!num!%%"
  40.      set /a u+=1
  41.   )
  42. if !u! lss 62 goto loop
  43. set /a number=0
  44. for /l %%i in (1 1 62) do (
  45.   set /a number+=1
  46.   set _x!number!=
  47. )
  48. set /p input=请输入:
  49. if "%input%" equ "" (
  50.     call :_help
  51.     pause>nul
  52.     goto begin
  53. )
  54. call :_help
  55. echo     输      入:%input%
  56. :a
  57. set str=!str!!input:~-1!
  58. set input=!input:~0,-1!
  59. if defined input goto a
  60. echo     反      序:!str!
  61. set "code_=a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  62. set str=!str: =#!
  63. :b
  64. set "str1=!str1!!str:~,1! "&set str=!str:~1!
  65. if defined str goto b
  66. for %%i in (!str1!) do (
  67.     set flag=1
  68.     for %%j in (!code_!) do (
  69.         if /i "%%i"=="%%j" if not "%%i"=="%%j" set str=!str!%%j&set flag=0
  70.     )
  71.     if !flag! equ 1 set str=!str!%%i
  72. )
  73. set "str=!str:#= !"
  74. echo     大小写转换:!str!
  75. set /a a=0,b=0
  76. for %%i in (!code!) do (
  77.    set /a a+=1
  78.    set n!a!=%%i
  79. )
  80. set str_str=!str!
  81. :c
  82. set /a b=0
  83. set _flag=1
  84. for %%j in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  85.    set /a b+=1
  86.    call set s=%%n!b!%%
  87.    if "%%j" equ "!str_str:~0,1!" set t=!t!!s!&set _flag=0&goto d
  88. )
  89. :d
  90. if !_flag! equ 1 set t=!t!!str_str:~,1!
  91. set "str_str=!str_str:~1!"
  92. if defined str_str goto c
  93. echo.&echo     最终结果:  !t!
  94. set str=
  95. set t=
  96. set str1=
  97. pause>nul
  98. goto begin
  99. :_help
  100. cls
  101. color 0a
  102. set /a c=0
  103. echo.&echo                      明暗文密码表
  104. echo     ────────────────────────
  105. set /a a=0,b=0
  106. for %%i in (!code!) do (
  107.    set /a a+=1
  108.    set n!a!=%%i
  109. )
  110. for %%j in (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  111.    set /a c+=1
  112.    call set s=%%n!c!%%
  113.    set /p=      %%j--!s!<nul
  114.    set /a num_1=!c!%%5
  115.    if !num_1! equ 0 echo.
  116. )
  117. echo.
  118. echo     ────────────────────────
  119. echo.&echo.
复制代码
2

评分人数

恩,是啊。加密那段对于每个字符都要最多执行62次(即为z的情况),如果全是0则每个字符只执行一次。全是z的话7、8个字符的字符串就要执行几百次,是有效率问题啊。我在想有没有更好的解决方法,大家一起来讨论吧。

TOP

回复 4楼 的帖子

谢谢版主的代码,我运行过了,还有一点小问题问题在顶楼列出。再次致谢~~

TOP

返回列表