Bộ giải mã chuỗi mã hóa — mọi lớp được đặt tên, mọi phỏng đoán được gắn nhãn
Bộ giải mã chuỗi mã hóa
Văn bản đã đi qua nhiều hơn một bộ mã hóa là trường hợp bình thường, không phải ngoại lệ: một body JSON nằm trong một token Base64, một URL nằm trong một dòng nhật ký, một giá trị biểu mẫu đã được escape phần trăm rồi mã hóa Base64 để có thể đi trong header. Trang này gỡ các lớp đó từng cái một, gọi tên kỹ thuật đã dùng ở mỗi bước, cho biết mức độ tin cậy và lý do, và liệt kê các kỹ thuật đã bị loại ở bước đó để bạn có thể không đồng ý. Nó dừng khi văn bản không còn trông như đã mã hóa, khi đạt giới hạn bước, hoặc khi bước tiếp theo sẽ đưa lại văn bản đã thấy. Không có gì bị đoán một cách lặng lẽ: một kỹ thuật có bảng chữ cái trùng với các từ thông thường sẽ không bao giờ được áp dụng riêng, nó chỉ được đề xuất. Mọi xử lý diễn ra cục bộ trong trình duyệt của bạn — dữ liệu của bạn không bao giờ được tải lên máy chủ nào.
Chỉ áp dụng một lớp riêng khi độ tin cậy ít nhất là:
Dừng sau
Chạy một lần giới hạn lớp ở trên. Bảng tương tự được xây theo cả hai cách, nên bạn có thể chuyển sang từng bước tại bất kỳ thời điểm nào.
Hoặc chọn một kỹ thuật bằng tay:
Danh sách này là những gì trang có thể thấy trong văn bản ngay lúc này. Các mật mã xoay luôn có trong đó, vì chúng không thể được phát hiện chút nào; cũng vậy là bất cứ thứ gì chỉ nhận ra được sau khi khoảng trắng của một văn bản bị ngắt đã được loại bỏ, được đánh dấu như vậy và không bao giờ được áp dụng riêng.
Văn bản đã mã hóa
Đầu vào này dài hơn mức trang muốn chạy mà không hỏi, và ước tính ở trên cho biết nó có thể mất . Nhấn Gỡ toàn bộ chuỗi một lần nữa để vẫn tiếp tục, hoặc rút ngắn văn bản trước.
Những gì trang thấy trong văn bản ngay bây giờ
(nhập hoặc dán gì đó trước)
(chuỗi sẽ hiển thị ở đây)
Các lớp, theo thứ tự đã được gỡ
#
Kỹ thuật
Độ tin cậy
Đầu vào → kết quả
Kích thước
Vì sao là cái này
Theo từng lớp
Sao chép lấy văn bản như nó đứng sau lớp đó. Hoàn lại loại bỏ lớp đó và mọi lớp phía trên nó, đó là cách bạn hoàn tác nhiều hơn một bước cùng lúc.
Kết quả sau0lớp(chưa có gì)
Chuỗi mã hóa là gì, và vì sao cần bộ giải mã riêng?
Lớp là một bộ mã hóa áp dụng lên văn bản. Chuỗi là hai hoặc nhiều lớp áp dụng lần lượt. Hầu hết ví dụ đời thường đều trông như thế này: ai đó cần đưa một đoạn nhị phân — một ảnh, một token đã ký — vào nơi chỉ mang văn bản, nên họ mã hóa nó bằng Base64. Kết quả Base64 đó rồi phải đi trong một URL, nên nó được escape phần trăm. Toàn bộ URL đó lại được đưa vào một dòng nhật ký hoặc tệp cấu hình, nên dấu gạch chéo ngược hay dấu nháy cũng được escape. Thứ bạn thấy khi gặp sự cố là lớp ngoài cùng, và nó không đọc được vì lý do đơn giản là các lớp trong vẫn còn.
Các bộ giải mã đơn mục đích không giúp được việc đó. Một bộ giải mã Base64 nhận JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC sẽ đưa ra một đáp án hoàn toàn đúng nhưng vẫn không đọc được, vì các escape phần trăm và tham chiếu ký tự vẫn nằm trên văn bản bạn muốn. Thứ bạn thực sự cần là một thứ quyết định, ở mỗi bước, bộ mã hóa nào cần gỡ — và trang này chính là quyết định đó được hiển thị.
Mã hóa không phải mã hóa bảo mật, và trang này không phá vỡ gì cả. Mọi kỹ thuật trên trang này đều là một cách công khai, đảo ngược được để ghi cùng thông tin xuống. Base64 không có khóa. Escape phần trăm không có khóa. Nếu lớp trong cùng được mã hóa, trang này sẽ giải các lớp ngoài và đưa cho bạn bản mã, và nó sẽ nói thẳng điều đó thay vì giả vờ là một kết quả. Không có gì ở đây để chạy và không có gì để giấu.
Các ví dụ được tính toán sẵn trên trang này
Mỗi hàng dưới đây là một đầu vào thật từ tệp dữ liệu của trang này, và cột giữa là thứ bộ gỡ của chính trang tìm thấy trong đó. Cột cuối là văn bản còn lại khi nó dừng.
Đầu vào là gì
Các lớp tìm thấy
Đầu vào, trích nguyên như khi đến
Còn lại khi dừng
Các hàng này do trang tự dựng từ danh sách trường hợp của chính nó và được chạy lại mỗi lần truy cập, nên chúng không thể lệch khỏi những gì mã thực sự làm. Phần tự kiểm tra bên dưới kiểm tra từng hàng.
Trang này quyết định gỡ lớp nào như thế nào
Nhìn hình dạng, không nhìn ý nghĩa. Mỗi kỹ thuật có một dấu hiệu nhận dạng — một escape phần trăm, một chuỗi chữ số hex chẵn, một bảng chữ cái và độ dài khớp với Base64. Trang liệt kê mọi kỹ thuật có dấu hiệu khớp với văn bản, kèm mức độ tin cậy từ 0 đến 1.
Giải mã, rồi kiểm tra xem kết quả có phải văn bản không. Một kỹ thuật chỉ đáng áp dụng khi nó cho ra thứ đọc được. Mọi ứng viên đều được chạy thực sự, và đầu ra của nó được chấm theo mức độ có ký tự in được.
Chỉ áp dụng những gì vượt ngưỡng, theo thứ tự tin cậy. Ứng viên có độ tin cậy cao nhất trên ngưỡng của bạn được áp dụng, và quá trình lặp lại trên kết quả. Dưới ngưỡng, các kỹ thuật được liệt kê nhưng không được áp dụng.
Một quy tắc trang này thêm vào. Ngay cả khi một kỹ thuật vượt ngưỡng, trang này cũng sẽ không áp dụng riêng nó trừ khi kết quả thực sự là văn bản đọc được — các ký tự thay thế và ký tự điều khiển bị tính là điểm trừ. Nếu không có quy tắc này, từ thông thường cafe sẽ được giải hợp lệ thành ba byte chỉ in được trong Latin-1, và getUserName sẽ được giải hợp lệ thành tám byte nhiễu. Bộ nhận diện đúng khi các chuỗi đó khớp bảng chữ cái; trang này quyết định rằng khớp bảng chữ cái là chưa đủ. Bạn vẫn có thể áp dụng chúng bằng tay, và danh sách ứng viên cho biết nó đã từ chối và lý do.
Dừng, có chủ đích. Khi không kỹ thuật nào vượt ngưỡng, khi văn bản không còn thay đổi, khi đạt giới hạn bước, hoặc khi bước tiếp theo sẽ đưa lại văn bản đã xuất hiện trong chuỗi này. Điều cuối cùng quan trọng: ROT13 là nghịch đảo của chính nó, nên một chuỗi được phép làm bước đó hai lần sẽ không bao giờ kết thúc.
Văn bản bị ngắt được đề xuất, không bao giờ được áp dụng. Nếu văn bản bị cắt qua nhiều dòng, bộ nhận diện thấy khoảng trắng, đọc như văn xuôi thông thường và không tìm thấy gì. Vì vậy trang bỏ khoảng trắng khỏi một bản sao của văn bản, hỏi lại bộ nhận diện, và đề xuất bất cứ thứ gì tìm được như một bước để bạn tự chọn. Bỏ khoảng trắng khỏi văn bản của bạn là viết lại văn bản của bạn, và trang này không viết lại thứ gì bạn không yêu cầu.
Trang này sẽ không làm gì
Nó chỉ giải mã, và không làm gì khác. Văn bản bạn dán không bao giờ được thực thi: không eval, không new Function, không chèn script, không mở tài liệu. Nó không bao giờ được gửi đi đâu: không tải lên, không yêu cầu, không phân tích. Ngoài vị trí quảng cáo ở cuối trang và hàng nút chia sẻ (đó là hai widget bên thứ ba duy nhất trang này tải), không phông hay script nào được lấy từ máy chủ khác. Đầu ra đã giải mã được ghi vào trang dưới dạng văn bản, nên một thẻ HTML xuất hiện từ một lớp được hiển thị như thẻ chứ không được biến thành thẻ thật. Bạn có thể kiểm chứng tất cả điều đó: nhấn Tự kiểm tra và nó sẽ kiểm tra mã nguồn của chính trang này xem có bất kỳ cấu trúc nào trong số đó không, và thất bại nếu tìm thấy.
Nó nhận diện được gì, và không nhận diện được gì
Kỹ thuật
Mức chắc chắn, khi đứng riêng
Điểm mấu chốt
Văn bản được trích trên trang này được viết riêng cho trang web. Các bảng chữ cái Base64, Base32, Base58, Base91 và quoted-printable cùng định dạng khối uuencode là các chuẩn đã công bố; việc giải mã theo đúng các định nghĩa đó chứ không theo bất kỳ đặc thù công cụ nào. Các vector tham chiếu của bảng chữ cái nằm trên các trang liên quan, chứa các vector kiểm thử RFC 4648.
Văn bản bị ngắt thành nhiều dòng
Một khối đã đi qua một thư email, một tệp PEM, một token trong header hay một hash được dán từ terminal thường là đã bị ngắt: bộ mã hóa đã cắt nó tại một cột cố định — 76 ký tự là quy ước MIME — và đặt ngắt dòng ở chỗ cột kết thúc. Những ngắt dòng đó không phải là một phần của dữ liệu. Chúng tồn tại để một dòng dài sống sót khi truyền đi, và mọi bộ giải mã đọc khối như vậy đều được kỳ vọng bỏ qua chúng.
Trang này không tự bỏ qua chúng, và lý do là quy tắc nó dùng ở mọi nơi khác. Khoảng trắng là dấu hiệu đơn lẻ mạnh nhất cho thấy một chuỗi là văn xuôi chứ không phải dữ liệu, và đó chính là phép thử giữ The quick brown fox jumps over the lazy dog. khỏi bị đọc thành bất cứ thứ gì. Một khối bị ngắt trông y hệt văn xuôi với phép thử đó, nên trang không tìm thấy gì trong nó — và rồi làm nửa phần trung thực của công việc: tính xem nó sẽ tìm thấy gì nếu khoảng trắng bị loại bỏ, liệt kê điều đó trong bộ chọn tay được đánh dấu bỏ khoảng trắng trước, và dừng ở đó. Nó được liệt kê chứ không được áp dụng vì việc bỏ khoảng trắng thay đổi văn bản của bạn, và trang này chỉ thay đổi văn bản khi nó chứng minh được thay đổi là gì. Ở đây nó chứng minh được thay đổi là gì, nhưng vẫn từ chối làm thay bạn, vì một văn bản có ngắt dòng giữa một giá trị và một văn bản có ngắt dòng giữa hai trường trông giống nhau từ bên trong.
Hai bước khi trang dừng ở một văn bản bị ngắt dòng. Chuyển sang Từng bước thủ công, nhấn Áp dụng lớp tiếp theo một lần (đó là điều tạo ra một chuỗi để thêm vào, và nó không đổi gì), rồi chọn mục đánh dấu bỏ khoảng trắng trước và nhấn Áp dụng. Hàng hiện ra cho biết đã xóa bao nhiêu ký tự khoảng trắng, và báo kích thước đầu vào là văn bản bạn đã dán, nên chênh lệch giữa hai số đếm trong hàng đó chính là khoảng trắng đã được loại bỏ.
Lập luận tương tự áp dụng cho các trường hợp đi theo hướng ngược lại. Một khối uuencode mang một dòng begin và một ký tự độ dài trên mỗi dòng, nên nó nhận ra được ngay khi còn nguyên và được áp dụng riêng; một thân quoted-printable giữ các ngắt dòng mềm của nó và được giải bởi bộ giải mã riêng, bộ này biết rằng một dấu = đơn ở cuối dòng là sự tiếp tục chứ không phải dữ liệu. Khi một phép thử hình dạng không phân biệt được văn xuôi với dữ liệu, trang từ chối và cho bạn thấy phương án thay thế thay vì chọn thay bạn.
Trang này sẽ chạy những gì, và từ chối những gì
Bảng dưới đây được xây từ các hằng số mà chính trang áp dụng, nên một hàng và một cảnh báo trên trang này không thể mâu thuẫn nhau. Hai con số khiến mọi người bất ngờ là các hàng Base58 và Base62: hai kỹ thuật đó được chuyển đổi bằng phép chia dài mà chi phí tăng theo bình phương độ dài, nên trang này chỉ chạy chúng trên một chuỗi ngắn và nói rõ điều đó trong bước thay vì tỏ ra bị treo.
Các ước tính được chủ ý đặt ở mức bi quan. Chúng đến từ một khung đo thời gian chứ không phải từ máy của bạn, và một trình duyệt trên máy tính thường nhanh hơn con số hiển thị vài lần.
🔷 Công cụ mã hóa
Gỡ văn bản đã được mã hóa nhiều hơn một lần, từng lớp một.