PDA

View Full Version : سوال: چرا دوتا علامت == به کدهای تولید شده توسط تابع base64_encode اضافه می شه؟



idocsidocs
پنج شنبه 16 شهریور 1391, 17:02 عصر
من باید از تابع base64_encode استفاده کنم و خروجی فقط باید رشته حرفی-عددی باشه تا کار به درستی انجام بشه.

اما وقتی از تابع base64_encode استفاده می کنم گاهی == به انتهای رشته اضافه می شه.

لطفا بگید این کاراکترها چی هستن وچطور می تونم اونها رو حذف کنم؟

eshpilen
پنج شنبه 16 شهریور 1391, 19:32 عصر
میتونی از bin2hex بجای base64 استفاده کنی. فقط خروجیش از base64 حجم بیشتری داره.

kab00k
پنج شنبه 16 شهریور 1391, 21:14 عصر
چون جزئی از کدهای تولید شده هست .
مثل اینکه بگید چرا داخل کد از حرف A استفاده شده . البته معمولا این علامت آخر کلمه میاد اما با حذفش کدتون به هم میرزیه

idocsidocs
پنج شنبه 16 شهریور 1391, 21:16 عصر
چرا این == به خروجی تابع base64_encode اضافه می شه؟ مگه نباید خروجی این تابع حرف و عدد باشه؟

eshpilen
پنج شنبه 16 شهریور 1391, 22:00 عصر
مگه نباید خروجی این تابع حرف و عدد باشه؟ نه خب کی گفته! :لبخند:
البته اون علامت = مثل اینکه یه معنای خاصی داره مربوط به Padding و اینها.
در مقالهء ویکیپدیا نوشته مشخص میکنه بلاک آخر طولش چقدر بوده و از این حرفا.
حالا شما اگر خیلی اصرار داری میتونی یه فکری بکنی براش. مثلا ابتدای رشته های خروجی base64 خودت یک عدد بذار که مشخص میکنه انتهای خروجی چندتا علامت = هست، بعد علامتهای مساوی رو حذف کن. بعد موقعی که میخوای رشته رو دیکد کنی، اول عدد ابتدای رشته رو بخون و به همون تعداد علامت مساوی به انتهای رشته append کن. البته یادت نره اون عدد ابتدای رشته رو هم قبل از دیکد کردن با تابع base64decode حذف کنی.
حال کردی؟ :چشمک:

idocsidocs
پنج شنبه 16 شهریور 1391, 22:12 عصر
حالا شما اگر خیلی اصرار داری میتونی یه فکری بکنی براش. مثلا ابتدای رشته های خروجی base64 خودت یک عدد بذار که مشخص میکنه انتهای خروجی چندتا علامت = هست، بعد علامتهای مساوی رو حذف کن. بعد موقعی که میخوای رشته رو دیکد کنی، اول عدد ابتدای رشته رو بخون و به همون تعداد علامت مساوی به انتهای رشته append کن. البته یادت نره اون عدد ابتدای رشته رو هم قبل از دیکد کردن با تابع base64decode حذف کنی.
بیخیال، اصلا نمی خواد چک کنم که رشته هست یا نه :چشمک: