本帖最后由 cjiabing 于 2012-3-14 15:20 编辑
终于真正的完成了!只是一个GTR变GEQ,害我弄了几天!~
以下是最新版的,比较稳定了:
作用:将文本字符转换为一种新字符,达到加密的目的。
方法:移位法和替换法。
性质:对称式加密。
安全性:解密过程可逆,安全性一般(肉眼难分辨)。
效率:单行字符数较少时效率一般,单行字符数达100以上时效率差。
原理:原字符——数字编码——新字符。设定一个元码——一个类似ASCII的字符表,然后查找单个字符在元码中的位置,表示为一个数字。然后采用将首字符转移到末位置的换位法对这个位置数字进行加密——此处可以换成你的加密法。经过加密,获得一个新的数字,利用这个数字反查元码表,获得新的字符。解密方法可逆。
用法:输入字符或拖入文件即可演示加密和解密。
拓展:本程序可将英文字符转换为数字,你可以对该数字编码进行加密,按提示操作即可。
-
- @echo off&COLOR 0c &::By Cjiabing From 批处理之家 Http://www.bathome.net
- set "Symbol= !#$%%&'()*+,-./0123456789;:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"…—·,。"
- setlocal enabledelayedexpansion
- call :length Symbol
- set /a SymbolLen=%len%/2
- ::echo;"%Symbol%" 验证,共%SymbolLen%位数。
- ::%Symbol%改编自ASCII,百分号变两个,双引号放后面,添加了几个中文标点符号。
- if exist "%~1" set "Input=%~1"&goto InputFile
- :Input 输入
- cls&title 批处理加密机 BatchEncryptor V1.1 Demo
- echo;
- echo;
- echo; BatchEncryptor V1.1 Demo
- echo;
- echo; ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
- echo; 采用转换法将输入字符转换为新字符;字符转数字,可扩展。
- echo; 每行最长支持4096字长;效率相对低些;可直接拖入文件编码。
- echo; 默认使用数字、大小写字母、英文标点符号、空格等编码。
- echo; ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
- echo;
- set Input=
- set /p "Input= 请输入:"
- if not "!Input!"=="" (goto InputFile) else (goto Input)
- :InputFile 文件处理
- set num=0
- if exist "!Input!" (
- for /f "tokens=*" %%a in ("!Input!") do set "FileName=%%~na"&set "FilePath=%%~dpa"
- cd.>%~dp0!FileName!_Encode.txt&cd.>%~dp0!FileName!_Decode.txt
- for /f "usebackq tokens=*" %%a in ("!Input!") do set "Input=%%a"&echo;&set /a num+=1&echo; !num!.加密字符【!Input!】&call :length Input&call :Contrl Input
- ) else call :length Input&call :Contrl Input
- echo;
- title 》》编码完成。&echo;&echo; 编码完成!请按任意键返回 . . .
- pause>nul
- goto Input
- :Contrl 控制台,控制加密和解密的总体顺序。
- call :Encode %1
- ::##此处为加密调用,处理的是输入的字符Input。##
- if defined WordName call :Decode WordName
- ::##此处为解密调用,处理的是上次加密得到的结果WordName。##
- goto :eof
- :Encode
- title 》》正在加密,1000字符加解密用时50秒左右,请稍候 . . .
- call :WordToCode %1
- Rem echo; 加密编码【!CodeName!】
- ::##可在此处添加你的加密算法的具体引用和调节等。##
- set CodeName=!CodeName:~1,1000000!!CodeName:~0,1!
- ::##当前采用的是编码首字符移位到编码末尾之调整移位。##
- ::##注意:该编码对Symbol要求高,可能存在缺陷##
- call :CodeToWord CodeName
- echo; 新密码【!WordName!】
- if exist "!FilePath!" echo;!WordName!>>%~dp0!FileName!_Encode.txt
- goto :eof
-
- :Decode
- title 》》正在解密,字符越长需要的时间越长! . . .
- call :WordToCode %1
- Rem echo; 解密编码【!CodeName!】
- ::##可在此处添加你的解密算法的具体引用和调节等。##
- set CodeName=!CodeName:~-1,1!!CodeName:~0,-1!
- ::##当前采用的是编码首字符移位到编码末尾之恢复移位##
- call :CodeToWord CodeName
- echo; 原密码【!WordName!】
- if exist "!FilePath!" echo;!WordName!>>%~dp0!FileName!_Decode.txt
- goto :eof
- :length 计算字符长度 code by plp626
- set "$=!%1!#"
- set len=&for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do if !$:~%%a^,1!. NEQ . set/a len+=%%a&set $=!$:~%%a!
- endlocal&If %2. neq . (set/a%2=%len%)else set /a len=%len%*2
- setlocal
- goto :eof
- :WordToCode 字符转编码
- set CodeName=
- for /l %%i in (0,1,%len%) do (
- for /l %%a in (0,1,%SymbolLen%) do if not "!%1:~%%i,1!"=="" if "!Symbol:~%%a,1!"=="!%1:~%%i,1!" (
- if %%a geq 10 (set CodeName=%%a!CodeName!) else (set CodeName=0%%a!CodeName!)
- )
- )
- goto :eof
- ::%%i针对输入字符串的字数,%%a针对元码个数。
- ::echo "!Symbol:~%%a,1!"=="!%1:~%%i,1!" %%a==!CodeName!
- :CodeToWord 编码转字符
- set WordName=
- for /l %%i in (0,2,%len%) do (
- for /l %%a in (0,1,%SymbolLen%) do (
- if "!WordName!"=="!Input!" (set "WordName=!WordName!") else (
- if "!%1:~%%i,2!"=="%%a" set "WordName=!Symbol:~%%a,1!!WordName!"
- if "!%1:~%%i,2!"=="0%%a" set "WordName=!Symbol:~%%a,1!!WordName!"
- )
- )
- )
- goto :eof
- ::##可将你的代码复制粘贴到后面。##
复制代码
|