일괄 적으로 base64 디코딩


83

배치를 사용하여 설치 프로그램을 만들려고합니다. 물론 설치 프로그램은 설치할 파일로 구성되어야하므로 base64로 파일을 인코딩하고 간단히 디코딩하여 대상에 기록 할 수 있습니다.

물론 Windows base64에 Linux 상자에 포함 된 도구 와 같은 것이 있으면 내 작업이 매우 쉬울 것 입니다. 그러나 단순히 거기에 있지 않기 때문에 배치 파일을 사용하여 base64 콘텐츠를 완전히 디코딩하는 방법이 있습니까? 그리고 이것을 어떻게 성취 할 수 있습니까?

도움을 주시면 감사하겠습니다.

(실험 일 뿐이므로 비 효율성 등은 걱정하지 않습니다.)


1
: 또한이 체크 아웃 f2ko.de/en/b64.php
데이비드 Refoua

이 의견은 제가 가장 좋아하는 대답이었습니다. 그 프로그램은 Linux 경험과 훨씬 비슷합니다.
neokyle dec.

답변:


166

실제로 Windows에는 base64를 인코딩하고 디코딩하는 유틸리티가 있습니다.-CERTUTIL

이 명령을 도입 한 Windows 버전을 잘 모르겠습니다.

파일을 인코딩하려면 :

certutil -encode inputFileName encodedOutputFileName

파일을 디코딩하려면 :

certutil -decode encodedInputFileName decodedOutputFileName

CERTUTIL에 사용할 수있는 여러 동사 및 옵션이 있습니다.

사용 가능한 거의 모든 동사 목록을 얻으려면 :

certutil -?

특정 동사에 대한 도움말을 보려면 (예 :-인코딩) :

certutil -encode -?

거의 모든 동사에 대한 완전한 도움말을 얻으려면 :

certutil -v -?

불가사의는 -encodehex동사에 표시되지 certutil -?certutil -v -?. 그러나 certutil -encodehex -?. 또 다른 편리한 기능입니다 :-)

최신 정보

David Morales의 주석과 관련하여, 머리글 또는 바닥 글 줄없이 base64 문자열을 만들 수 있는 동사 에 대한 문서화되지 않은 유형 옵션-encodehex 이 있습니다.

certutil [Options] -encodehex inFile outFile [type]

유형 1은 머리글 또는 바닥 글 줄없이 base64를 생성합니다.

사용 가능한 유형 형식에 대한 간략한 목록은 https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p56536 을 참조 하십시오 . 사용 가능한 형식에 대한 자세한 내용은 https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p57918을 참조 하십시오 .

조사되지는 않았지만 -decodehex동사에는 선택적 후행 유형 인수도 있습니다.


8
Certutil 은 최소한 Windows Server 2003 부터 사용되었습니다 .
David Ruhmann 2013 년

38
"base64 in batch"가 내가 검색 엔진에 입력 한 것 중 가장 절박한 것이라고 생각했을 것입니다
nik.shornikov 2013 년

4
running certutil -encode inputFileName encodedOutputFileName은 "----- BEGIN CERTIFICATE -----"및 "----- END CERTIFICATE -----"로 묶인 base64 문자열을 생성하므로 파일이 생성 된 후 직접 디코딩 할 수 없습니다.
데이비드 모랄레스

2
@DavidMorales-사실이 아닙니다! 해봤 어? -DECODE 명령은 머리글과 바닥 글이 제대로 작동합니다. 정확한 규칙은 확실하지 않지만 CERTUTIL -DECODE는 인코딩 된 소스의 형식에 대해 매우 관대합니다.
dbenham

4
@AndrzejMartyna-고장난 것은 아니지만 최대 입력 파일 크기는 74472684 바이트입니다.
SomethingDark

5

다음은 base64를 인코딩하는 base64encode.bat라는 배치 파일입니다.

@echo off
if not "%1" == "" goto :arg1exists
echo usage: base64encode input-file [output-file]
goto :eof
:arg1exists
set base64out=%2
if "%base64out%" == "" set base64out=con 
(
  set base64tmp=base64.tmp
  certutil -encode "%1" %base64tmp% > nul
  findstr /v /c:- %base64tmp%
  erase %base64tmp%
) > %base64out%

2
당신이 추가 할 경우이 스크립트는 잘 작동 setlocal enabledelayedexpansion하고 사용 !base64tmp!내부 (...). 그렇지 않으면 (...)시퀀스가 실행될 때가 아니라 읽을 때 값이 결정됩니다 .
Jesse Chisholm

1
헤더를 처리 할 필요없이 훨씬 더 간단한 솔루션 : stackoverflow.com/a/60404255/12861751
HackingAddict1337
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.