2017-08-26 4 views
0

Je suis capable de décrypter le fichier manuellement en utilisant GNUPG ou Kleopatra (gpg4win), mais quand j'exécute ce batch, je reçois la sortie 0 KB, quelle qu'en soit la raison? ci-dessous est mon code;0 KB fichier de sortie après le décryptage

@echo off 
set LOGFILE=Log.log 
call :LOG > %LOGFILE% 
exit 
:LOG 

for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set "dt=%%a" 
set "YYYY=%dt:~0,4%" 
set "MM=%dt:~4,2%" 
set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" 
set "Min=%dt:~10,2%" 
set "Sec=%dt:~12,2%" 
set "secret=mypassword" 

set datestamp=%YYYY%%MM%%DD% 

set origPath=D:\Encrypted\ 
set origFile=my_test_file 
set origExt=.PGP 
set origCompleteFile=%origPath%%origFile%%datestamp%%origExt% 

set destPath=D:\Encrypted\ 
set destFile=my_test_file_ddmmyyyy 
set destExt=.csv 
set destCompleteFile=%destPath%%destFile%%YYYY%-%MM%-%DD%%destExt% 

set ctaFolder=N:\Test\ 

echo Decrypt file : "%origCompleteFile%" 
echo Save decrypted file in : "%destCompleteFile%" 

rem decrypt CTA File 
gpg --batch --passphrase "%secret%" --decrypt "%origCompleteFile%" > "%destCompleteFile%" 

rem copy to CTA folder in .54 
xcopy /s/y "%destCompleteFile%" "%ctaFolder%" 

Répondre

0

Il n'est pas possible de rediriger des données binaires dans un fichier. L'interface de ligne de commande Windows est conçue pour les données textuelles et non pour les données binaires. Et en outre, tout ce qui est sorti par les commandes ci-dessous :LOG à stdout est redirigé vers le fichier Log.log par votre fichier batch. Le GPG manual explique toutes les options de ligne de commande disponibles pour cette application de console.

Il est expliqué pour l'option --decrypt que les données déchiffrées sont écrites pour gérer stdout ou dans un fichier spécifié après l'option --output.

Donc la solution utilise simplement l'option --output au lieu d'une redirection de stdout dans un fichier.

gpg --batch --passphrase "%secret%" --output "%destCompleteFile%" --decrypt "%origCompleteFile%" 

Le code de lot entier pourrait être optimisé à ce code:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 
set "secret=mypassword" 

rem Get current date in format YYYYMMDD for usage in file name (DDMMYYYY commented out). 
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "LocalDateTime=%%I" 
rem set "FileNameDate=%LocalDateTime:~6,2%%LocalDateTime:~4,2%%LocalDateTime:~0,4%" 
set "FileNameDate=%LocalDateTime:~0,8%" 

set "origPath=D:\Encrypted\" 
set "origFile=my_test_file_" 
set "origExt=.csv.gpg" 
set "origCompleteFile=%origPath%%origFile%%FileNameDate%%origExt%" 

set "destPath=D:\Encrypted\" 
set "destFile=my_test_file_" 
set "destExt=.csv" 
set "destCompleteFile=%destPath%%destFile%%FileNameDate%%destExt%" 

set "ctaFolder=N:\Test\" 

echo Decrypt file: "%origCompleteFile%" 
echo Save decrypted file in: "%destCompleteFile%" 

rem Decrypt CTA file 
gpg --batch --passphrase "%secret%" --output "%destCompleteFile%" --decrypt "%origCompleteFile%" 

rem Copy to CTA folder in .54 
%SystemRoot%\System32\xcopy.exe "%destCompleteFile%" "%ctaFolder%" /Q /Y >nul 
endlocal 

Il serait bien sûr possible de générer directement le fichier décrypté dans le dossier défini par la variable d'environnement ctaFolder.