Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何加密字符串并将其保存在文件中,以及从同一文件中读取解密后的字符串?_Batch File_Encryption - Fatal编程技术网

Batch file 如何加密字符串并将其保存在文件中,以及从同一文件中读取解密后的字符串?

Batch file 如何加密字符串并将其保存在文件中,以及从同一文件中读取解密后的字符串?,batch-file,encryption,Batch File,Encryption,我在网上找到了一个加密和解密字符串的有用代码。 所以我想对它做一点修改,以便让加密和解密在同一批中,而不是分成两个单独的文件,这里是链接 这是我修改过的代码: @echo off setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION title Encrypt and decrypt string color a (set CHAR[a]=UDFM45) & (set CHAR[b]=H21DGF) & (set CHAR[c]=FD

我在网上找到了一个加密和解密字符串的有用代码。 所以我想对它做一点修改,以便让加密和解密在同一批中,而不是分成两个单独的文件,这里是链接

这是我修改过的代码:

@echo off
setlocal  ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
title Encrypt and decrypt string
color a
(set CHAR[a]=UDFM45) & (set CHAR[b]=H21DGF) & (set CHAR[c]=FDH56D) & (set CHAR[d]=FGS546) & (set CHAR[e]=JUK4JH)
(set CHAR[f]=ERG54S) & (set CHAR[g]=T5H4FD) & (set CHAR[h]=RG641G) & (set CHAR[i]=RG4F4D) & (set CHAR[j]=RT56F6)
(set CHAR[k]=VCBC3B) & (set CHAR[l]=F8G9GF) & (set CHAR[m]=FD4CJS) & (set CHAR[n]=G423FG) & (set CHAR[o]=F45GC2)
(set CHAR[p]=TH5DF5) & (set CHAR[q]=CV4F6R) & (set CHAR[r]=XF64TS) & (set CHAR[s]=X78DGT) & (set CHAR[t]=TH74SJ)
(set CHAR[u]=BCX6DF) & (set CHAR[v]=FG65SD) & (set CHAR[w]=4KL45D) & (set CHAR[x]=GFH3F2) & (set CHAR[y]=GH56GF)
(set CHAR[z]=45T1FG) & (set CHAR[1]=D4G23D) & (set CHAR[2]=GB56FG) & (set CHAR[3]=SF45GF) & (set CHAR[4]=P4FF12)
(set CHAR[5]=F6DFG1) & (set CHAR[6]=56FG4G) & (set CHAR[7]=USGFDG) & (set CHAR[8]=FKHFDG) & (set CHAR[9]=IFGJH6)
(set CHAR[0]=87H8G7) & (set CHAR[@]=G25GHF) & (set CHAR[#]=45FGFH) & (set CHAR[$]=75FG45) & (set CHAR[*]=54GDH5)
(set CHAR[(]=45F465) & (set CHAR[.]=HG56FG) & (set CHAR[,]=DF56H4) & (set CHAR[-]=F5JHFH) & (set CHAR[ ]=SGF4HF)
(set CHAR[\]=45GH45) & (set CHAR[/]=56H45G)
echo Enter a string to encrypt:
set /p Encrypt=
cls
set Encrypt2=%Encrypt%
set "EncryptOut="
:encrypt2
set char=%Encrypt2:~0,1%
set Encrypt2=%Encrypt2:~1%
set EncryptOut=%EncryptOut%!CHAR[%char%]!
if not "%Encrypt2%"=="" goto encrypt2
echo.%EncryptOut%>%~dp0encrypted.txt
echo.
set /p CryptedPass=<%~dp0encrypted.txt
echo Input string clear text ===^> %Encrypt%
echo.
echo Output string crypted ===^> %CryptedPass%
pause

set /p Decrypt=<%~dp0encrypted.txt
cls
set Decrypt2=%Decrypt%
set "DecryptOut="
:decrypt2
set char=%Decrypt2:~0,6%
set Decrypt2=%Decrypt2:~6%
set DecryptOut=%DecryptOut%!CHAR[%char%]!
if not "%Decrypt2%"=="" goto decrypt2
echo Input string: %Decrypt%
echo.
echo Output string: %DecryptOut%
pause
@echo关闭
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
标题加密和解密字符串
颜色a
(集字符[a]=UDFM45)&(集字符[b]=H21DGF)&(集字符[c]=FDH56D)&(集字符[d]=FGS546)&(集字符[e]=JUK4JH)
(集字符[f]=ERG54S)&(集字符[g]=T5H4FD)&(集字符[h]=RG641G)&(集字符[i]=RG4F4D)&(集字符[j]=RT56F6)
(集字符[k]=VCBC3B)&(集字符[l]=F8G9GF)&(集字符[m]=FD4CJS)&(集字符[n]=G423FG)&(集字符[o]=F45GC2)
(集字符[p]=TH5DF5)和(集字符[q]=CV4F6R)和(集字符[r]=XF64TS)和(集字符[s]=X78DGT)和(集字符[t]=TH74SJ)
(集字符[u]=BCX6DF)&(集字符[v]=FG65SD)&(集字符[w]=4KL45D)&(集字符[x]=GFH3F2)&(集字符[y]=GH56GF)
(集字符[z]=45T1FG)&(集字符[1]=D4G23D)&(集字符[2]=GB56FG)&(集字符[3]=SF45GF)&(集字符[4]=P4FF12)
(集字符[5]=F6DFG1)&(集字符[6]=56FG4G)&(集字符[7]=USGFDG)&(集字符[8]=FKHFDG)&(集字符[9]=IFGJH6)
(集字符[0]=87H8G7)&(集字符[@]=G25GHF)&(集字符[#]=45FGFH)&(集字符[$]=75FG45)&(集字符[*]=54GDH5)
(集字符[(]=45F465)&(集字符[.]=HG56FG)&(集字符[,]=DF56H4)&(集字符[-]=F5JHFH)&(集字符[]=SGF4HF)
(设置字符[\]=45GH45)和(设置字符[/]=56H45G)
echo输入要加密的字符串:
set/p加密=
cls
设置Encrypt2=%Encrypt%
设置“EncryptOut=”
:encrypt2
set char=%Encrypt2:~0,1%
设置Encrypt2=%Encrypt2:~1%
设置EncryptOut=%EncryptOut%!CHAR[%CHAR%]!
如果不是“%Encrypt2%”==“转到Encrypt2”
回显。%EncryptOut%%>%~dp0encrypted.txt
回声。
set/p CryptedPass=%Encrypt%
回声。
echo输出字符串加密===^>%CryptedPass%
暂停

set/p Decrypt=您的代码中有两个问题:

  • 如果
    %~dp0
    路径可能包含空格,则无法找到正确的文件名。请始终将文件名括在引号中

  • 加密/解密是一个双向过程。例如,在加密中“a”被“UDFM45”更改,但在解密中“UDFM45”被“a”更改。在代码中,加密和解密过程使用相同的数组。必须定义两个分开的数组:一个用于加密,另一个用于解密

我在下面的批处理代码中修复了这些问题。对不起,当我使用/修改批处理代码时,我不喜欢管理某些批处理构造,因此我以我习惯的方式修改了代码

@echo off
setlocal EnableDelayedExpansion
title Encrypt and decrypt string
color a

rem Create Encrypt/Decrypt arrays
set "charSet=abcdefghijklmnopqrstuvwxyz1234567890@#$*(.,- \/"
set i=0
for %%a in (
    UDFM45 H21DGF FDH56D FGS546 JUK4JH
    ERG54S T5H4FD RG641G RG4F4D RT56F6
    VCBC3B F8G9GF FD4CJS G423FG F45GC2
    TH5DF5 CV4F6R XF64TS X78DGT TH74SJ
    BCX6DF FG65SD 4KL45D GFH3F2 GH56GF
    45T1FG D4G23D GB56FG SF45GF P4FF12
    F6DFG1 56FG4G USGFDG FKHFDG IFGJH6
    87H8G7 G25GHF 45FGFH 75FG45 54GDH5
    45F465 HG56FG DF56H4 F5JHFH SGF4HF
    45GH45 56H45G ) do (
   for %%i in (!i!) do for /F "delims=" %%c in ("!charSet:~%%i,1!") do (
      set "ENC[%%c]=%%a"
      set "DEC[%%a]=%%c"
   )
   set /A i+=1
)

echo Enter a string to encrypt:
set /p Encrypt=
REM cls
set Encrypt2=%Encrypt%
set "EncryptOut="
:encrypt2
   set "EncryptOut=%EncryptOut%!ENC[%Encrypt2:~0,1%]!"
   set "Encrypt2=%Encrypt2:~1%"
if defined Encrypt2 goto encrypt2
echo %EncryptOut%> "%~dp0encrypted.txt"
echo/
set /p CryptedPass=< "%~dp0encrypted.txt"
echo Input string clear text ===^> %Encrypt%
echo/
echo Output string crypted   ===^> %CryptedPass%
pause

set /p Decrypt=< "%~dp0encrypted.txt"
REM cls
ECHO/
ECHO/
set Decrypt2=%Decrypt%
set "DecryptOut="
:decrypt2
   set "DecryptOut=%DecryptOut%!DEC[%Decrypt2:~0,6%]!"
   set "Decrypt2=%Decrypt2:~6%"
if defined Decrypt2 goto decrypt2
echo Input string: %Decrypt%
echo/
echo Output string: %DecryptOut%
pause
@echo关闭
setlocal EnableDelayedExpansion
标题加密和解密字符串
颜色a
rem创建加密/解密数组
set“charSet=abcdefghijklmnopqrstuvxyz1234567890@#$*(,-\/”
集合i=0
对于%%a in(
UDFM45 H21DGF FDH56D FGS546 JUK4JH
ERG54S T5H4FD RG641G RG4F4D RT56F6
VCBC3B F8G9GF FD4CJS G423FG F45GC2
TH5DF5 CV4F6R XF64TS X78DGT TH74SJ
BCX6DF FG65SD 4KL45D GFH3F2 GH56GF
45T1FG D4G23D GB56FG SF45GF P4FF12
F6DFG1 56FG4G USGFDG FKHFDG IFGJH6
87H8G7 G25GHF 45FGFH 75FG45 54GDH5
45F465 HG56FG DF56H4 F5JHFH SGF4HF
45GH45 56H45G)do(
对于%%i in(!i!)为/F“delims=“%%c in”(!字符集:~%%i,1!”)执行(
设置“ENC[%%c]=%%a”
设置“十二月[%%a]=%%c”
)
设置/A i+=1
)
echo输入要加密的字符串:
set/p加密=
REM cls
设置Encrypt2=%Encrypt%
设置“EncryptOut=”
:encrypt2
设置“EncryptOut=%EncryptOut%!ENC[%Encrypt2:~0,1%]!”
设置“Encrypt2=%Encrypt2:~1%”
如果定义了Encrypt2,则转到Encrypt2
回显%EncryptOut%%>“%~dp0encrypted.txt”
回音/
set/p CryptedPass=<“%~dp0encrypted.txt”
回显输入字符串明文===^>%Encrypt%
回音/
echo输出字符串加密===^>%CryptedPass%
暂停
set/p Decrypt=<“%~dp0encrypted.txt”
REM cls
回音/
回音/
设置Decrypt2=%Decrypt%
设置“DecryptOut=”
:2
设置“DecryptOut=%DecryptOut%!DEC[%Decrypto2:~0,6%]!”
设置“Decrypt2=%Decrypt2:~6%”
如果定义了Decrypt2,则转到Decrypt2
回显输入字符串:%Decrypt%
回音/
回显输出字符串:%s输出%
暂停

很好的解决方案,我刚刚在变量字符集中添加了大写字符。谢谢你,Aacini。你的解决方案非常有用;)哇!你在修改我的代码时犯了两个错误:1.你在字符集中额外插入了25个字符(你错过了“X”),但您没有插入相应的25个附加加密代码!您的修改使“G”之后的所有字符都没有加密代码。2.即使您为附加字符插入附加加密代码,该方法也不会以这种方式工作。
set ENC[a]=a的值
set ENC[a]=一个
的不同值分配同一变量中的值,因为批处理文件变量不区分大小写!我回滚了您的修改。。。