Tôi có hai khối dữ liệu base64 trong một biến bash. Các ngắt dòng thông thường trong dữ liệu base64 đã được thay thế bằng khoảng trắng và biến về cơ bản là một chuỗi một dòng rất dài.
Tôi có thể giải mã hai khối dữ liệu base64 có trong biến nhưng tôi đã trải nghiệm một số sắc thái khi cố gắng thực hiện. Tôi muốn hiểu nếu tôi đang tiếp cận điều này một cách chính xác hoặc có cách nào tốt hơn để giải mã dữ liệu cơ sở64 không chứa ngắt dòng. Đây là những gì tôi có:
Đoạn đầu tiên là 350 ký tự và tôi có thể giải mã thành công như thế này:
echo ${DATA::350} | openssl base64 -d | wc -c
256
Đoạn thứ hai là 5745 ký tự nhưng lệnh trên không tạo ra kết quả như mong đợi. I E:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
Tuy nhiên, nó hoạt động nếu tôi đặt dòng ngắt trở lại:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
Tôi hy vọng có một số vấn đề về độ dài dòng mà đoạn đầu tiên đủ nhỏ để tránh và nó dường như là một tính năng của bộ giải mã base64 đang được sử dụng (hai cái thông thường base64
và openssl base64
hoạt động khác nhau).
Bộ base64
giải mã (thay vì openssl base64
) dừng ở ký tự không hợp lệ đầu tiên (khoảng trắng) và do đó chỉ giải mã "dòng" đầu tiên (48 byte dữ liệu đầu ra) trong khi OpenSSL tạo ra 432 ký tự (9 "dòng"). Các base64
lệnh có một tùy chọn để bỏ qua rác , vì vậy công trình này:
$ echo ${DATA:350} | base64 -d -i | wc -c
4240
Bộ giải mã OpenSSL dường như không có tùy chọn như vậy.
Ngoài ra, loại bỏ khoảng trắng hoàn toàn hoạt động cho base64
nhưng không openssl base64
:
$ echo ${DATA:350} | tr -d ' ' | openssl base64 -d | wc -c
400
$ echo ${DATA:350} | tr -d ' ' | base64 -d | wc -c
4240
Vì vậy, cuối cùng, tôi đã thay thế các dòng mới và sử dụng bộ giải mã OpenSSL bởi vì tôi cần xử lý thêm dữ liệu được giải mã bằng mọi cách:
$ openssl enc -d -a -in <(echo ${DATA:350} | /usr/bin/tr ' ' "\n") -aes-256-cbc -pass file:<(echo $skey) | ...
Nhưng tôi muốn hiểu OpenSSL có thể giải mã dữ liệu base64 không chứa ngắt dòng không?
tr
sử dụng${var//old[/new}
- nhưng không đồng thời với lớp nền.