如何使用批处理加密文本文件?

时间:2013-12-27 02:47:14

标签: batch-file encryption

如何使用批处理加密文本文件中的内容?我该怎么解密呢?

我已经尝试将每个字母设置为一个数字,但我不知道如何将字符串分成每个字母并执行此操作。

我在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

请帮忙谢谢

2 个答案:

答案 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,则会保留大小写,但您必须将大写字母添加到abetcipher1,否则加密文件将逐字包含大写字符。

请注意

(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