پیاده سازی الگوریتم base32 در php
در این نوشته به روش پیاده سازی الگوریتم base32 در زبان برنامه نویسی پی اچ پی میپردازیم تا بتوانید به سادگی آن را در پروژهی خود استفاده کنید.
پیاده سازی الگوریتم base32 در php
برای پیاده سازی الگوریتم base32 در php میتوانید از کد زیر استفاده کنید:
<?php
function base32_encode($data)
{
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
$binary = '';
$result = '';
// Convert the data to binary
foreach (str_split($data) as $char) {
$binary .= str_pad(decbin(ord($char)), 8, '0', STR_PAD_LEFT);
}
// Encode binary to Base32
while (strlen($binary) % 5 != 0) {
$binary .= '0';
}
for ($i = 0; $i < strlen($binary); $i += 5) {
$chunk = substr($binary, $i, 5);
$index = bindec($chunk);
$result .= $alphabet[$index];
}
return $result;
}
function base32_decode($data)
{
$alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
$binary = '';
$result = '';
// Convert Base32 to binary
foreach (str_split($data) as $char) {
$index = strpos($alphabet, $char);
if ($index === false) {
throw new Exception("Invalid character in Base32 string");
}
$binary .= str_pad(decbin($index), 5, '0', STR_PAD_LEFT);
}
// Remove padding
$binary = rtrim($binary, '0');
// Convert binary to ASCII
for ($i = 0; $i < strlen($binary); $i += 8) {
$chunk = substr($binary, $i, 8);
if (strlen($chunk) < 8) {
$chunk = str_pad($chunk, 8, '0', STR_PAD_RIGHT);
}
$result .= chr(bindec($chunk));
}
return $result;
}
اگر نیاز به آموزشهای بیشتری در ارتباط با زبان برنامه نویسی پی اچ پی دارید در بخش نظرات این نوشته برای ما ارسال کنید.
برای امتیاز به این نوشته کلیک کنید!
[کل: 2 میانگین: 5]



















برای امنیت تو رمزنگاری واقعا base32 کاربردی هست؟
بستگی به شرایط دارد چون base32 یک الگوریتم برگشت پذیر است و باید این نکته را در نظر داشته باشید.
اگه ورودی decode شامل کاراکترای lowercase باشه خطا میده، میشه هندلش کرد؟
بله این امکان وجود دارد.
چرا از str_pad برای باینری استفاده شده، راه بهینهتر نیست؟
استفاده از str_pad برای باینری به این خاطر بوده که سادهترین و خواناترین روش برای پر کردن صفرهای سمت چپ محسوب میشه. البته میتونی برای سرعت بالاتر از عملیات بیتبهبیت یا sprintf هم استفاده کنی.
این تابع توی رشتههای خیلی طولانی memory leak نداره؟
خیر، خود PHP توی اجرای str_pad یا عملیات رشتهای معمولی memory leak نداره، فقط حافظهی موقتی بیشتری مصرف میکنه. اگه با رشتههای خیلی بزرگ (مثلاً چند مگابایت) کار میکنی، بهتره بخشبخش پردازش کنی یا از stream استفاده بشه تا مصرف رم کنترلشدهتر بمونه.
این کد با یونیکد و کاراکترهای غیر لاتین هم درست کار میکنه؟
بله تفاوتی ندارد.