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

۵ سال پیش(به روز شده در ۵ سال پیش) پی اچ پی(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 );

برچسبها

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

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

تابع تبدیل حجم فایل به فرمتهای مختلف...

تابع زیر حجم فایل را بررسی نموده و با توجه به اندازه آن , حجم را با فرمت مناسب نمایش می دهد. function formatFileSize( $size ) { $file_size = $size; $i = 0;   $name = array( 'byte', 'kB',...

محاسبه زمان اجرای یک کد(زمان‌سنج) در php...

بسیار پیش می آید تا مدت زمان اجرای یک تکه کد را بدانیم. دو تابع زیر برای حل این مسئله به کمک شما می آیند و مثال مربوطه نیز نحوه استفاده از این دو تابع را کاملا مناسب بیان نموده است. کارکرد توابع آسان ...

نمایش آرایه به صورت درخت...

تابع print_r برای نمایش متغیر مخصوصا آرایه ها بسیار پر کاربرد است و قطعا برنامه نویسان php بارها با آن برخورد داشته اند. در این مطلب تابعی معرفی می گردد که آرایه ها را بر خلاف تابع print_r بصورت درخت ...

تعریف تابع در تابع...

برای فراخوانی تابعی که در درون تابع دیگر ایجاد شده است باید ابتدا تابع پدر فراخوانی شود و سپس تابع فرزند قابل دسترس خواهد بود. مثال: function foo() { function bar() { echo "Hello World!"; ...