标题: [加密解密] 批处理版简易明文加密器 [打印本页]
作者: lhjoanna 时间: 2008-11-16 00:02 标题: 批处理版简易明文加密器
最近在做字符串的练习,练了几个就想着把几个小的给组合起来,就有了一个简易明文转换器的想法。大家一起来看看啊,欢迎提建议!!- 代码更新历史:
- 2008.11.16 更新了密码表的产生问题,可以随机生成62个不同字符(0-9,a-z,A-Z)的密码表(感谢pusofalse的建议)!
复制代码
- 感谢pusofalse关于第三段中效率问题的建议,我运行了一下,效率可以提高很多,但是字母输出却全为大写字母,原因为此句 If defined .!var! 中对于.!var!的判断,小写字母和大写字母在此不区分。很好的思路,学习了。还在思考如何能兼顾效率和输出。欢迎大家提建议!再次感谢pusofalse!!
复制代码
复制代码
作者: pusofalse 时间: 2008-11-16 01:08
加密那段似乎存在效率问题~
作者: lhjoanna 时间: 2008-11-16 01:32
恩,是啊。加密那段对于每个字符都要最多执行62次(即为z的情况),如果全是0则每个字符只执行一次。全是z的话7、8个字符的字符串就要执行几百次,是有效率问题啊。我在想有没有更好的解决方法,大家一起来讨论吧。
作者: pusofalse 时间: 2008-11-16 04:03
试下这样?、、、- @echo off
- set "var=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"
- set "str=4 5 6 7 8 9 0 1 2 3 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 A B C D E F G"
- For /l %%i in (0 2 123) do (call set ".%%var:~%%i,1%%=%%str:~%%i,1%%")
- set /p text=Input:
- :loop
- If defined text (
- set "var=%text:~,1%"
- setlocal enabledelayedexpansion
- If defined .!var! (set "var=!.%text:~,1%!")
- <nul set /p= !var!
- endlocal
- set "text=%text:~1%" & goto loop
- )
- echo. & pause
复制代码
另,如果能用随机密码表的话,加密可能更加牢固些了。
[ 本帖最后由 pusofalse 于 2008-11-16 08:22 编辑 ]
作者: lhjoanna 时间: 2008-11-16 13:46 标题: 回复 4楼 的帖子
谢谢版主的代码,我运行过了,还有一点小问题问题在顶楼列出。再次致谢~~
作者: pusofalse 时间: 2008-11-16 14:54
用随机密码表扰乱明文,输出结果看起来完全就像是直接echo字符串常量lkamsd的,这个常量随便写就可以。唯有当输入的字符串稍长,或者是一篇完整的英文文章时才有规律可循。对于字符串的处理,批处理也是不太擅长,比如对特殊字符><!%|&^"的处理等。if defined .!var! 的确不能区分大小写,在想两全的方法。
可能会有帮助:
重命名含特殊字符的文件:
http://bbs.bathome.net/thread-1251-1-1.html
用维热纳尔方阵给文本加密:
http://bbs.bathome.net/viewthrea ... C%C8%C8%C4%C9%B6%FB
作者: yangyf34 时间: 2011-3-22 18:12
请问,如何实现我这样的加密思路?
我有一段文字:
“批处理是一种简化的脚本语言“
要加密下,想这样加密:
从一篇大概能包含上面字符的文件中,转换成我上面段文字。就是所谓的明文加密吧?
例:
1.txt 一个文件是加密密码字典。
1.txt的第1行第3个是:批
1.txt的第3行第15个是:处
1.txt的第5行第13个是:理
1.txt的第12行第15个是:是
1.txt的第2行第14是:一
1.txt的第5行第17是:种
1.txt的第34行第16是:简
1.txt的第13行第23:化
1.txt的第78行第13:的
1.txt的第123行第23:脚
1.txt的第98行第13:本
1.txt的第12行第18是:语
1.txt的第34行第20:言
转换后的明文密码是:
1,3 3,15 5,13 12,15 2,14 5,17 34,16 13,23 78,13 123,23 98,13 12,18 34,20
-------------------------------------------------------------------------------------------------------------
如果不限于用dos批命令,我想可以用这样原理来做:
首先加密软件载入txt密码字典到内存:
比如:一个 1.txt字典文件,含这样内容:
【白腹树袋熊的学名来自两个希腊字,杜鹃树和兔子。
作为一种已知的生物,这种树居有袋目哺乳动物,一生大部分时间在地上度过。
它们在野外生存数量很少,属濒危物种。】
那么在内存中这样描述:
白=1,1 (第一行第一个)
腹=1,2 (第一行第二个)
树=1,3 (第一行第三个)
。。。
作=2,1 (第二行第一个)
。。。
后面重复的字符忽略编码,也就是已经编码的字符再次遇到不再编码,比如第二行的“的”。
在加密的时候,先调入字典入内存,然后调入需要加密的文字入内存,2相比较,生成1,12.2,15.3,22.12,14 之类的加密码文本输出电脑。
还有个设想:
如果觉得一串数字看了碍眼,可以把字典内容“倒转编码”,再次用数字串对比编码生成汉字输出电脑。当然这些汉字肯定是语义昏乱~~~
作者: 0000 时间: 2017-1-13 14:55
本帖最后由 0000 于 2017-1-13 15:05 编辑
感谢pusofalse关于第三段中效率问题的建议,我运行了一下,效率可以提高很多,但是字母输出却全为大写字母,原因为此句 If defined .!var! 中对于.!var!的判断,小写字母和大写字母在此不区分。
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- rem 标记大写字母
- set CAP=ABCDEFGHIJKLMNOPQRSTUVWXYZ
- for /l %%n in (0,1,25) do (set CAP_!CAP:~%%n,1!=!CAP:~%%n,1!)
-
- echo 大小写字母分类器
- set /p lts=要分类的字母:
- set cap=
- set notcap=
- set other=
- :fenlei
- if "!lts!"=="" goto ok
- set lt=!lts:~0,1!
- set lts=!lts:~1!
- if "!lt!"=="!" set other=!other!^^!
- if "!lt!"=="=" set other=!other!=
- if "!lt!"==":" set other=!other!:
- if "!CAP_%lt%!"=="" (
- set other=!other!!lt!
- goto fenlei
- )
- if "!CAP_%lt%!"=="!lt!" (
- set cap=!cap!!lt!
- ) else (
- set notcap=!notcap!!lt!
- )
- goto fenlei
- :ok
- echo 大写字母有:!cap!
- echo 小写字母有:!notcap!
- echo 不是字母的有:!other!
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |