base64 olarak kodlanmış veriler "rastgele" ile karışık

3 Cevap php

Ben base64 kodlanmış bulunuyor bazı verilerle bir giriş dizesi olsun. Ne yazık ki, bu (her küçük) karıştırdı rastgele onaltılı verileri alır. Onaltılık veri 32 byte segmentlerinde gibi görünüyor çünkü elle dışarı sıralamak için oldukça basittir. Örneğin, ben böyle bir örnek dize biçimlendirmek:

    6dd11d15c419ac219901f14bdd999f38
    0ad94e978ad624d15189f5230e5435a9
    2dc19fe95e583e7d593dd52ae7e68a6e
    465ffa6074a371a8958dad3ad271181a
    23310939b981b4e56f2ecee26f82ec60
    fe04bef49be47603d1278cc80673b226

    VGhpcyBpcyBzb

    6dd11d15c419ac219901f14bdd999f38
    0ad94e978ad624d15189f5230e5435a9
    2dc19fe95e583e7d593dd52ae7e68a6e
    465ffa6074a371a8958dad3ad271181a
    23310939b981b4e56f2ecee26f82ec60
    fe04bef49be47603d1278cc80673b226
    6dd11d15c419ac219901f14bdd999f38
    0ad94e978ad624d15189f5230e5435a9
    2dc19fe95e583e7d593dd52ae7e68a6e
    465ffa6074a371a8958dad3ad271181a
    23310939b981b4e56f2ecee26f82ec60
    fe04bef49be47603d1278cc80673b226

    21lIGJhc2UtNjQ

    bb4af7e61760735ba17c29e8f542a668
    75da91e90863f1ddb7e149297fc59afc
    f5de951fb65d06d2927aab7b9b54830e
    2d935616a54c381c2f38db3731d5a378

    gZW5jb2RlZCB

    6dd11d15c419ac219901f14bdd999f38
    0ad94e978ad624d15189f5230e5435a9
    2dc19fe95e583e7d593dd52ae7e68a6e
    465ffa6074a371a8958dad3ad271181a
    23310939b981b4e56f2ecee26f82ec60
    fe04bef49be47603d1278cc80673b226

    kYXRhIGhvb3JheSE=

Temelde, base64, eşyalarını almak ve (PHP) bunu çözmek gerekir. Yakalamak Ben uzun bir dize olarak tüm almak ve nerede linebreaks koymak her zaman hemen belli değil olmasıdır. Örneğin, base64 şeyler ilk bit hex bazı verilerin kolayca yanlış, 'b' biter. Bunu yapmak için nasıl bir kayıp bir şey yaşıyorum ... Herhangi bir fikir?

Thanks!
-mala

3 Cevap

Bu çözümsüz bir sorun olduğunu düşünüyorum - rastgele onaltılık 32 bayt ayırt edilemez base64 kodlanmış veri 32 byte değerinde olması tamamen mümkündür. Akışı hakkında daha fazla bilgi olmadan hangi kova gibi veri gidebilir gibi bir karar yapmak imkansız olurdu.

Sen gibi yapabilirdik:

read these 32 characters - if( preg_match(/[^a-f0-9]/) ) { 
echo "this is a hex string"; 
} else {
$base64[] = preg_replace('/[a-f0-9]$/', '');
}

Of course, there's the issue of the trailing a-z/0-9, but it's a starting point. You could add some code in which counts from the end of your suspected base64 to the beginning of the next [g-zA-Z] and see if that number of characters is divisible by 32. If it is, then you probably found all of your original base64. If not, you won't have a clue if 'b' is the end of your b64, or the beginning of your hex, and 6 is the end of your hex, or beginning of your NEXT b64.

Kısacası, bu aptal ve bu beni üzüyor.

Her bir karar noktası (sonraki 32 bayt base64 veya onaltılık) kadar çözme ipucu taşımak olabilir base64 olasılığı vardır.

Base64 olarak bu hex dizeleri birini yorumlama always kolayca deşifre ediliyor olursa olsun çöp tespit verir ki en küçük şansı da var.

Aksi takdirde şans bitti.