_B64Decode

HTTP Requests

_B64Decode

Top  Previous  Next

 

Decode Base64 về Binary

 

 _B64Decode($base64Data [, $iRunByMachineCode = False ])

 

 

 

* Tham số

$base64Data

Dữ liệu kiểu Base64

$iRunByMachineCode

Sử dụng Crypt32.dll để chuyển. Mặc định: Không

 

 

 

* Giá trị trả về

Chuỗi dữ liệu kiểu Binary.

 

 

 

* Ghi chú

Tham số $RunByMachineCode:

oTrue: Chuyển base64 về binary dựa trên Crypt32.dll. Ưu điểm: tốc độ chuyển rất nhanh.
oFalse: Chuyển bằng thuật toán dựa trên những hàm dựng sẵn của AutoIt. Ưu điểm: dễ tuỳ biến.

→ Nếu Base64 Data lớn (ví dụ dữ liệu của tập tin) thì nên bật True.

 

 

 

* Ví dụ

Ví dụ 1:

#include <_HttpRequest.au3>

$b64Text = 'VMO0aSB5w6p1IFZp4buHdCBOYW0='

$binaryText = _B64Decode($b64Text)

$stringText = BinaryToString($binaryText, 4)

MsgBox(4096, 'String', $stringText) ; Kết quả: Tôi yêu Việt Nam                                                    

 

 

Ví dụ 2: Tải ảnh từ Google Images với từ khoá "Dog". Sau khi request GET để lấy source Html xong ta xem thử thì thấy các ảnh bị mã hoá Base64 như sau:

<html>

..........

(function(){var _image_src='data:image/jpeg;base64,/9j/4AAQ34GJ678H....UDdaVKnroS+z//2Q\x3d\x3d' ; .....

..........

</html>

 

ØTa phải dùng StringRegExp để tách các dữ liệu Base64 đó ra.
ØĐể ý thêm: Ta thấy Base64 phải chỉ gồm các ký tự 0-9, A-Z, dấu +, dấu / và dấu = . Thế mà trong chuỗi trên lại có dấu \ (\x3d\x3d). Vậy có nghĩa là chuỗi trên đã bị encode, ta phải thêm một bước là dùng hàm _HTMLDecode để giải loại này. Đọc thêm về _HTMLDecode để hiểu rõ hơn.

 

#include <_HttpRequest.au3>

$rq = _HttpRequest(2, 'https://www.google.com.vn/search?hl=en&q=dog')

$b64Image = StringRegExp($rq, "var _image_src='data:image/jpeg;base64,(.*?)'", 3)

_ArrayDisplay( $b64Image)

 

For $i = 0 To UBound($b64Image) - 1

$b64Image[$i] = _HTMLDecode($b64Image[$i], '\x')

$b64Image[$i] = _B64Decode($b64Image[$i], True)

_HttpRequest_Test($b64Image[$i], 'image' & $i & '.jpg', Default, False) ; Ghi tập tin nhưng không Shellexecute

Next