Kodlama Zinciri Çözücü

Birden fazla kodlayıcıdan geçmiş metin egzotik değil, olağan durumdur: bir Base64 belirteci içindeki bir JSON gövdesi, bir günlük satırındaki bir URL, bir başlıkta taşınabilsin diye önce yüzde kaçışlanıp sonra Base64 kodlanmış bir form değeri. Bu sayfa bu katmanları birer birer çözer, her adımda kullandığı tekniği adlandırır, ne kadar emin olduğunu ve nedenini yazar ve o adımda reddettiği teknikleri listeler; böylece onunla aynı fikirde olmayabilirsiniz. Metin kodlanmış görünmeyi bıraktığında, adım sınırına ulaştığında ya da bir sonraki adım zaten gördüğü bir metni geri getirecekse durur. Hiçbir şey sessizce tahmin edilmez: alfabesi sıradan sözcüklerle örtüşen bir teknik asla tek başına uygulanmaz, yalnızca önerilir.
Tüm işlemler tarayıcınızda yerel olarak yapılır — verileriniz asla bir sunucuya yüklenmez.

Bu konuda yeni misiniz? Kodlama zincirleri sade bir dille açıklanmış — bir katmanın ne olduğu, kodlamanın neden şifreleme olmadığı ve adımların sırasının neden önemli olduğu.
Bir katmanı yalnızca güveni en az şu değerde olduğunda tek başına uygula:
Şurada dur
Yukarıdaki katman sınırını tek seferde çalıştırır. Tablo her iki durumda da aynı oluşturulur; bu yüzden istediğiniz noktada adım adım ilerlemeye geçebilirsiniz.
Ya da bir tekniği elle seçin:
Bu liste, sayfanın metinde şu anda görebildiği şeylerdir. Döndürme şifreleri her zaman listededir, çünkü hiç tespit edilemezler; ayrıca yalnızca sarılmış bir metnin boşlukları çıkarıldıktan sonra tanınabilir hale gelen her şey de listededir, bu şekilde işaretlenir ve asla tek başına uygulanmaz.
Bu girdi, bu sayfanın soru sormadan çalıştırmayı sevdiğinden daha uzun ve yukarıdaki tahmin, sürebileceğini söylüyor. Yine de ilerlemek için Tüm zinciri çözün'e tekrar tıklayın ya da önce metni kısaltın.
(önce bir şey yazın veya yapıştırın)
(zincir burada görünecek)
Kodlama zinciri nedir ve neden kendi çözücüsüne ihtiyaç duyar?

Bir katman, metne uygulanan tek bir kodlayıcıdır. Bir zincir ise birbiri ardına uygulanan iki ya da daha fazla katmandır. Neredeyse her gündelik örnek şöyledir: birisi ikili bir şeyi — bir görseli, imzalı bir belirteci — yalnızca metin taşıyan bir yere koymak zorundadır, bu yüzden Base64 yapar. Bu Base64 sonucu bir URL içinde taşınmak zorunda kalır, bu yüzden yüzde kaçışlanır. O URL'nin tamamı bir günlük satırına ya da bir yapılandırma dosyasına konur, bu yüzden ters eğik çizgiler ya da tırnaklar da kaçışlanır. Sorunla karşılaştığınızda gördüğünüz şey en dıştaki katmandır ve okunamaz; çünkü basit bir nedenle iç katmanlar hâlâ üzerinde durmaktadır.

Tek amaçlı çözücüler bu konuda yardımcı olmaz. Base64 çözücüsüne JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC verilirse, kusursuz bir yanıt üretir ama yine de okunamaz; çünkü istediğiniz metnin üstünde hâlâ yüzde kaçışları ve karakter başvuruları durur. Gerçekten ihtiyacınız olan, her adımda hangi kodlayıcının kaldırılacağına karar veren bir şeydir — bu sayfa, bu kararın görünür hâlidir.

Kodlama şifreleme değildir ve bu sayfa hiçbir şeyi kırmaz. Bu sayfadaki her teknik aynı bilgiyi yazmanın herkese açık, geri döndürülebilir bir yoludur. Base64'ün anahtarı yoktur. Yüzde kaçışlamanın anahtarı yoktur. En içteki katman şifrelenmişse, bu sayfa dış katmanları çözer ve size şifreli metni verir; bunu bir sonuç gibi göstermek yerine açıkça söyler. Burada çalıştırılacak ya da saklanacak bir şey yoktur.
Bu sayfadaki çalışılmış örnekler

Aşağıdaki her satır, bu sayfanın veri dosyasındaki gerçek bir girdidir ve ortadaki sütun, sayfanın kendi çözücüsünün içinde bulduğu şeydir. Son sütun, durduğunda kalan metindir.

Girdinin ne olduğu Bulunan katmanlar Girdi, geldiği gibi tırnak içinde Durduğunda kalan

Bu satırlar sayfa tarafından kendi durum listesinden oluşturulur ve her ziyarette yeniden çalıştırılır; bu yüzden kodun gerçekte yaptığından sapamazlar. Aşağıdaki kendi testi her birini denetler.

Bu sayfa hangi katmanı kaldıracağına nasıl karar verir
  1. Anlama değil, şekle bakın. Her tekniğin bir imzası vardır — bir yüzde kaçışı, çift sayıda onaltılık rakam dizisi, Base64'e uyan bir alfabe ve uzunluk. Sayfa, imzası metinle eşleşen her tekniği 0 ile 1 arasında bir güvenle listeler.
  2. Çöz, sonra sonucun metin olup olmadığını denetle. Bir teknik yalnızca okunabilir bir şey üretirse uygulanmaya değer. Her aday gerçekten çalıştırılır ve çıktısı ne kadarının yazdırılabilir karakter olduğuna göre puanlanır.
  3. Yalnızca eşiği geçeni, güvenine göre sırayla uygulayın. Eşiğinizin üzerindeki en yüksek güvenli aday uygulanır ve süreç sonuç üzerinde tekrarlanır. Eşiğin altındaki teknikler listelenir ama uygulanmaz.
  4. Bu sayfanın eklediği bir kural. Bir teknik eşiği geçse bile, sonuç gerçekten okunabilir bir metin değilse, bu sayfa onu tek başına uygulamaz — değiştirme karakterleri ve kontrol karakterleri aleyhine sayılır. Bu kural olmasaydı, sıradan cafe sözcüğü yalnızca Latin-1'de yazdırılabilir üç bayt olarak geçerli biçimde çözülürdü ve getUserName sekiz bayt gürültü olarak çözülürdü. Dedektör bu dizgilerin alfabeye uyduğu konusunda haklıdır; bu sayfa ise alfabeye uymanın yeterli olmadığına karar verir. Bunları yine elle uygulayabilirsiniz; aday listesi reddettiğini ve nedenini söyler.
  5. Bilerek durur. Hiçbir teknik eşiği geçmediğinde, metin değişmeyi bıraktığında, adım sınırına ulaşıldığında ya da bir sonraki adım bu zincirde zaten görünmüş bir metni geri getireceğinde. Son durum önemlidir: ROT13 kendi tersidir, bu yüzden zincirin bu adımı iki kez atmasına izin verilirse hiç bitmezdi.
  6. Sarılmış metin yalnızca önerilir, asla uygulanmaz. Metin birkaç satıra bölünmüşse, dedektör boşluk görür, sıradan düzyazı okur ve hiçbir şey bulamaz. Bu yüzden sayfa metnin bir kopyasından boşlukları çıkarır, dedektöre yeniden sorar ve bulduğu şeyi elle seçilecek bir adım olarak önerir. Metninizden boşluk çıkarmak metninizi yeniden yazmaktır ve bu sayfa sizin istemediğiniz hiçbir şeyi yeniden yazmaz.
Bu sayfanın yapmayacakları
Yalnızca çözer, başka bir şey yapmaz. Yapıştırdığınız metin asla çalıştırılmaz: eval yok, new Function yok, betik enjeksiyonu yok, belge açma yok. Asla bir yere gönderilmez: yükleme yok, istek yok, analitik yok. Sayfanın altındaki reklam alanı ve paylaş düğmeleri satırı dışında (bu sayfanın yüklediği tek iki üçüncü taraf bileşenidir), hiçbir yazı tipi ya da betik başka bir sunucudan alınmaz. Çözülmüş çıktı sayfaya metin olarak yazılır; bu yüzden bir katmandan çıkan bir HTML etiketi etiket olarak değil, etiket gibi görüntülenir. Bunların hepsini doğrulayabilirsiniz: Kendi testine basın; sayfa kendi kaynağında bu yapılardan herhangi birini arar ve bulursa başarısız olur.
Neyi tanıyabildiği, neyi tanıyamadığı
Teknik Tek başına ne kadar emin Yakalama

Bu sayfada alıntılanan metin bu site için yazılmıştır. Base64, Base32, Base58, Base91 ve quoted-printable alfabeleri ile uuencode blok biçimi yayımlanmış olanlardır; çözme, herhangi bir aracın tuhaflıklarına değil bu tanımlara göre yapılır. Alfabelerin referans vektörleri, RFC 4648 test vektörlerini içeren kardeş sayfalardadır.

Birkaç satıra sarılmış metin

Bir e-posta iletisinden, bir PEM dosyasından, bir başlıktaki bir belirteçten ya da bir terminalden kopyalanmış bir özet gibi bir blok genellikle sarılmıştır: kodlayıcı onu sabit bir sütunda kırmış — MIME geleneği 76 karakterdir — ve sütunun bittiği yere bir satır sonu koymuştur. Bu satır sonları verinin parçası değildir. Uzun bir satırın aktarımda hayatta kalması için vardır ve böyle bir bloğu okuyan her çözücünün onları yok saymasının beklendiği yerdir.

Bu sayfa bunları kendi başına yok saymaz ve nedeni, bu sayfanın her yerde kullandığı kuraldır. Boşluk, bir dizginin veri değil düzyazı olduğunun en güçlü tek işaretidir ve The quick brown fox jumps over the lazy dog. cümlesinin hiçbir şey olarak okunmasını engelleyen testtir. Sarılmış bir blok bu teste tam olarak düzyazı gibi görünür, bu yüzden sayfa içinde hiçbir şey bulamaz — ve sonra çalışmanın dürüst yarısını yapar: boşluklar çıkarılsaydı ne bulacağını hesaplar, bunu önce boşlukları çıkar olarak işaretlenmiş elle seçici listesinde gösterir ve orada durur. Uygulanmak yerine listelenir, çünkü boşluk çıkarmak metninizi değiştirir ve bu sayfa yalnızca değişikliğin ne olduğunu kanıtlayabildiğinde metin değiştirir. Burada değişikliğin ne olduğunu kanıtlayabilir, yine de sizin için yapmayı reddeder; çünkü bir değerin ortasında satır sonu olan bir metin ile iki alan arasında satır sonu olan bir metin, içeriden bakıldığında aynı görünür.

Sayfa sarılmış bir metinde durduğunda yapılacak iki adım. Elle adım adım ilerle kipine geçin, Sonraki katmanı uygulayın düğmesine bir kez basın (bu, eklenecek bir zincir oluşturur ve hiçbir şeyi değiştirmez), sonra önce boşlukları çıkar olarak işaretlenmiş girdiyi seçip Uygulayın'a basın. Ortaya çıkan satır kaç boşluk karakterinin kaldırıldığını söyler ve girdi boyutunu yapıştırdığınız metin olarak bildirir; bu yüzden o satırdaki iki sayı arasındaki fark tam olarak çıkarılan boşluktur.

Aynı gerekçe tersi yönde giden durumları da kapsar. Bir uuencode bloğu her satırda bir begin satırı ve bir uzunluk karakteri taşır, bu yüzden olduğu gibi tanınabilir ve tek başına uygulanır; bir quoted-printable gövdesi kendi yumuşak satır sonlarını korur ve bir satır sonundaki tek bir sondaki ='nin veri değil devam olduğunu bilen kendi çözücüsü tarafından çözülür. Bir şekil testi düzyazı ile veriyi ayırt edemediğinde, sayfa sizin yerinize seçmek yerine reddeder ve alternatifi gösterir.

Bu sayfanın çalıştıracağı ve reddettiği şeyler

Aşağıdaki tablo, sayfanın uyguladığı aynı sabitlerden oluşturulur; bu yüzden bu sayfadaki bir satır ve bir uyarı birbiriyle çelişemez. İnsanları şaşırtan iki rakam Base58 ve Base62 satırlarıdır: bu iki teknik, maliyeti uzunluğun karesiyle büyüyen uzun bölme ile dönüştürülür; bu yüzden sayfa bunları yalnızca kısa bir dizgide çalıştırır ve asılıymış gibi görünmek yerine bunu adımda söyler.

Tahminler kasıtlı olarak kötümserdir. Makinenizden değil bir zamanlama aracından gelirler ve bir masaüstü tarayıcı genellikle gösterilen rakamın birkaç katı hızlıdır.