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

时间:2015-07-16 02:43:59

标签: batch-file encryption

我在网上找到了一个有用的代码来加密和解密字符串。 所以我想稍微改变一下,为了让加密和解密在同一批次中而不是分成两个单独的文件,链接Batch Encryption

这是我修改后的代码:

@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

我的问题是在代码的最后一部分,即显示字符串以从文本文件中读取解密的字符串?他什么都没告诉我? 当然我错过了什么?但是我找不到它到底在哪里? 提前谢谢你

1 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题:

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

  • 加密/解密是双向流程。例如,&#34; a&#34;被&#34; UDFM45改变了#34; 加密,但&#34; UDFM45&#34;改变了&#34; a&#34;在解密。在您的代码中,对加密和解密进程使用相同的数组。您必须定义两个独立的阵列:一个用于加密,另一个用于解密。

我在下面的批处理代码中解决了这些问题。劳驾;当我使用/修改批处理代码时,我不想管理某些批处理构造,所以我按照习惯的方式修改了代码......

@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