توابع رمزگذاری و رمزگشایی یک رشته با خروجی‌های متفاوت

۵ سال پیش(به روز شده در ۵ سال پیش) پی اچ پی(PHP)(توابع) ۰(غیر فعال)

دو تابع encrypt و decrypt به ترتیب مربوط به رمزگذاری و رمزگشایی می باشند. اما تفاوتی که با حالت معمول دارند این است که خروجی تابع encrypt برای یک مقدار با هر بار فراخوانی متفاوت است. این ویژگی قطعا در بسیاری از موارد امنیتی کاربرد خواهد داشت البته با آزمایش می توان به خصوصیات جالب این توابع پی برد و آنها را تقویت نمود.

function get_rnd_iv( $iv_len )
{
   $iv = '';
   while ( $iv_len-- > 0 )
      $iv .= chr( mt_rand() & 0xFF );
   return $iv;
}
 
function encrypt( $plain_text, $password = 'ASXDCFVGED$%kdknddbdFGt123', $iv_len = 5 )
{
   $plain_text .= "";
   $n = strlen( $plain_text );
   if ( $n % 16 )
      $plain_text .= str_repeat( "", 16 - ( $n % 16 ) );
   $i = 0;
   $enc_text = get_rnd_iv( $iv_len );
   $iv = substr( $password ^ $enc_text, 0, 512 );
   while ( $i < $n ) {
      $block = substr( $plain_text, $i, 16 ) ^ pack( 'H*', md5( $iv ) );
      $enc_text .= $block;
      $iv = substr( $block . $iv, 0, 512 ) ^ $password;
      $i += 16;
   }
   $enc_text = base64_encode( $enc_text );
   return $enc_text;
}
 
function decrypt( $enc_text, $password = 'ASXDCFVGED$%kdknddbdFGt123', $iv_len = 5 )
{
   $enc_text = base64_decode( $enc_text );
   $n = strlen( $enc_text );
   $i = $iv_len;
   $plain_text = '';
   $iv = substr( $password ^ substr( $enc_text, 0, $iv_len ), 0, 512 );
   while ( $i < $n ) {
      $block = substr( $enc_text, $i, 16 );
      $plain_text .= $block ^ pack( 'H*', md5( $iv ) );
      $iv = substr( $block . $iv, 0, 512 ) ^ $password;
      $i += 16;
   }
   return preg_replace( '/\x13\x00*$/', '', $plain_text );
}
 
echo $result = encrypt( 'Test' );
echo decrypt( $result );

برچسبها

هیچ برچسبی موجود نیست.

صفحات پیشنهادی

تابع glob...

با استفاده از تابع glob لیست فایلها با پسوند مختلف را باز می گرداند: $files = glob('*.{jpg,png}', GLOB_BRACE); print_r($files); out----------------------------------- Array ( [0] => book.png [1] ...

جدا کردن 3 رقم 3 رقم اعداد جهت نمایش مقادیر پولی در php...

هر چند در php تابعی بنام number_format جهت انجام اینکار وجود دارد اما درج تابع دستی آن نیز خالی از لطف نیست....

محاسبه مقدار حافظه مصرف شده در RAM سیستم(سرور)...

با استفاده از تابع ()memory_usage براحتی میتوانید به مقدار حافظه مصرفی از RAM آگاهی یابید. این تابع از تابع اصلی()memory_get_usage استفاده می کند. function memory_usage() { return (int)(m...

نمایش نام با فرمت مناسب(گسترش تابع ucwords)...

تابع ucwords برای بزرگ کردن حروف ابتدای کلمات یک رشته بکار می رود. البته زمانی این تابع کاربرد دارد که فاصله بین کلمات فضای خالی باشد(مثلا خط تیره را نیز جز کلمه بحساب می آورد). حال زمانیکه فاصله بین ...