如何使用批处理加密文本文件中的内容?我该怎么解密呢?
我已经尝试将每个字母设置为一个数字,但我不知道如何将字符串分成每个字母并执行此操作。
我在youtube上观看了一个视频,帮助将字母转换成数字,但它没有用文件做。
这是他在视频中提供的代码。
@echo off
setlocal enableDelayedExpansion
set /p code=Text:
set chars=0123456789abcdefghijklmnopqrstuvwxyz
for /L %%N in (10 1 36) do (
for /F %%C in ("!chars:~%%N,1!") do (
set "code=!code:%%C=%%N!"
)
)
echo !code!
pause
请帮忙谢谢
答案 0 :(得分:2)
@ECHO OFF
SET abet=abcdefghijklmnopqrstuvwxyz!@#-/\ .0123456789
SET cipher1=8p#j4 9z\6w.ae@0u2r5o!xk-cf1b3g7hmqil/sntdvy
(
FOR /f "delims=" %%a IN (q20794050.txt) DO (
SET line=%%a
CALL :encipher
)
)>q20794050.txt.1
(
FOR /f "delims=" %%a IN (q20794050.txt.1) DO (
SET line=%%a
CALL :decipher
)
)>q20794050.txt.2
GOTO :EOF
:decipher
SET morf=%abet%
SET from=%cipher1%
GOTO trans
:encipher
SET from=%abet%
SET morf=%cipher1%
:trans
SET "enil="
:transl
SET $1=%from%
SET $2=%morf%
:transc
IF /i "%line:~0,1%"=="%$1:~0,1%" SET enil=%enil%%$2:~0,1%&GOTO transnc
SET $1=%$1:~1%
SET $2=%$2:~1%
IF DEFINED $2 GOTO transc
:: No translation - keep
SET enil=%enil%%line:~0,1%
:transnc
SET line=%line:~1%
IF DEFINED line GOTO transl
ECHO %enil%
GOTO :eof
这是使用简单的Cæsar(替换)代码来实现它的方法。
可以将 abet
(可能从文件)设置为要编码的字符集。同样,cipher1
可以设置为已转换的集合 - 只需确保abet
中的每个字符也出现在cipher1
中。
输入文本中但未在abet
中显示的任何字符都不会被翻译。
我使用q20794050.txt
:
The quick brown fox [jumps] {over} the lazy dog 9876543210.
9876543210 The quick brown fox !@#-/\ jumps over the lazy dog.f
哪个编码为q20794050.txt.1
:
5z4huo\#whp2@xeh @kh[6oa0r]h{@!42}h5z4h.8c-hj@9hyvdtns/liqm
yvdtns/liqh5z4huo\#whp2@xeh @khf1b3g7h6oa0rh@!42h5z4h.8c-hj@9m
(请注意,最后一行末尾有 Space ...)
并成功解密为q20794050.txt.2
注意:以上内容不会处理某些问题字符,例如%& |><
我只使用小写,因此任何大写都会被进程翻译成小写。如果您从/i
语句中删除IF
,则会保留大小写,但您必须将大写字母添加到abet
和cipher1
,否则加密文件将逐字包含大写字符。
请注意
(for...do (...))>somefilename
将创建一个包含任何数据somefilename
的新文件ECHO
- 即使ECHO
出现在子例程中。
答案 1 :(得分:0)
@echo off setlocal enableDelayedExpansion for /f "tokens=* delims= " %%h in ('type %1') do ( set text=%%h ) set chars=0123456789abcdefghijklmnopqrstuvwxyz for /L %%N in (10 1 36) do ( for /F %%C in ("!chars:~%%N,1!") do ( set "text=!text:%%C=-%%N!" ) ) echo !text! > %userprofile%\Desktop\encrypted.txt pause (using a different .bat file) @echo off setlocal enableDelayedExpansion for /f "tokens=* delims= " %%h in ('type %1') do ( set text=%%h ) set chars=0123456789abcdefghijklmnopqrstuvwxyz for /L %%N in (10 1 36) do ( for /F %%C in ("!chars:~%%N,1!") do ( set "text=!text:%%N=%%C!" ) ) for /f %%K in ("!text!") do ( set "text=!text:-=!" ) echo !text! > %userprofile%\Desktop\decrypted.txt pause