Giải mã hàng loạt base64


83

Tôi đang cố gắng tạo một trình cài đặt bằng cách sử dụng hàng loạt. Tất nhiên, một trình cài đặt cần bao gồm các tệp sẽ được cài đặt, vì vậy tôi đang nghĩ đến việc mã hóa các tệp trong base64, và chỉ cần giải mã chúng và ghi chúng vào đích.

Tất nhiên, công việc của tôi sẽ rất dễ dàng nếu Windows có thứ gì đó giống như base64công cụ mà các hộp Linux chứa. Tuy nhiên, vì nó đơn giản là không có ở đó, có cách nào để giải mã nội dung base64 hoàn toàn bằng cách sử dụng các tệp hàng loạt không? Và tôi sẽ thực hiện điều này như thế nào?

Bất kỳ trợ giúp được đánh giá cao.

(Đó chỉ là một thử nghiệm, vì vậy tôi không lo lắng về sự kém hiệu quả và những thứ tương tự.)


1
Ngoài ra kiểm tra này: f2ko.de/en/b64.php
David Refoua

Nhận xét này là câu trả lời yêu thích của tôi, chương trình đó giống như một trải nghiệm Linux hơn nhiều.
neokyle

Câu trả lời:


165

Trên thực tế Windows có một tiện ích mã hóa và giải mã base64 - CERTUTIL

Tôi không chắc phiên bản Windows nào đã giới thiệu lệnh này.

Để mã hóa một tệp:

certutil -encode inputFileName encodedOutputFileName

Để giải mã một tệp:

certutil -decode encodedInputFileName decodedOutputFileName

Có một số động từ và tùy chọn có sẵn cho CERTUTIL.

Để có được danh sách gần như tất cả các động từ có sẵn:

certutil -?

Để nhận trợ giúp về một động từ cụ thể (-encode chẳng hạn):

certutil -encode -?

Để nhận được sự trợ giúp đầy đủ cho gần như tất cả các động từ:

certutil -v -?

Một cách bí ẩn, -encodehexđộng từ không được liệt kê với certutil -?hoặc certutil -v -?. Nhưng nó được mô tả bằng cách sử dụng certutil -encodehex -?. Đó là một chức năng tiện dụng khác :-)

Cập nhật

Về nhận xét của David Morales, có một tùy chọn loại được ghi chép kém cho -encodehexđộng từ cho phép tạo chuỗi base64 mà không có dòng đầu trang hoặc chân trang.

certutil [Options] -encodehex inFile outFile [type]

Loại 1 sẽ mang lại base64 mà không có dòng đầu trang hoặc chân trang.

Xem https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p56536 để biết danh sách ngắn gọn về các định dạng loại có sẵn. Và để có cái nhìn sâu hơn về các định dạng có sẵn, hãy xem https://www.dostips.com/forum/viewtopic.php?f=3&t=8521#p57918 .

Không được điều tra, nhưng -decodehexđộng từ cũng có một đối số loại theo sau tùy chọn.


8
Certutil đã có từ ít nhất là Windows Server 2003 .
David Ruhmann

37
Tôi sẽ đưa ra một số tỷ lệ cược tốt mà "base64 trong hàng loạt" là điều tuyệt vọng nhất mà tôi từng tham gia trong một công cụ tìm kiếm
nik.shornikov

4
running certutil -encode inputFileName encodedOutputFileNametạo ra một chuỗi base64 được bao quanh bởi "----- BEGIN CERTIFICATE -----" và "----- END CERTIFICATE -----" vì vậy bạn không thể giải mã trực tiếp tệp sau khi nó được tạo.
David Morales

2
@DavidMorales - Không đúng! Bạn đã thử à? Lệnh -DECODE hoạt động tốt với đầu trang và chân trang tại chỗ. Tôi không chắc chắn về các quy tắc chính xác, nhưng CERTUTIL -DECODE rất tha thứ về định dạng của nguồn được mã hóa.
dbenham

4
@AndrzejMartyna - không phải là nó bị hỏng, nhưng có kích thước tệp đầu vào tối đa là 74472684 byte.
SomethingDark

5

Đây là một tệp hàng loạt, được gọi là base64encode.bat, mã hóa base64.

@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
Tập lệnh này sẽ hoạt động tốt hơn nếu bạn thêm setlocal enabledelayedexpansionvà sử dụng !base64tmp!bên trong (...). Nếu không, giá trị được xác định khi (...)chuỗi được đọc, không phải khi nó được thực thi.
Jesse Chisholm

1
một giải pháp đơn giản hơn nhiều mà không cần phải xử lý các tiêu đề: stackoverflow.com/a/60404255/12861751
HackingAddict1337
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.