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

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

برچسبها

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

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

تابع utf8SubString , گرفتن بخشی از رشته با یونیکد UTF8...

تابع معمولی substr در php برای رشته های یونیکدی جواب نمی دهد. در واقع در رشته های یونیکد دار هر حرف از ترکیب سه یا چهار حرف اسکی که کد اسکی آنها بیشتر از 127 است تشکیل شده است. لذا نیاز است تا برای ای...

مرتب سازی آرایه های چند متغیری و چند بعدی در php...

تابع زیر مرتب سازی یک آرایه با چندین مقدار برای هر ایندکس و آرایه چند بعدی را با اعمال محدودیت انجام میدهد. میتوانید با اندکی تغییر آنرا پیشرفته تر کنید!......

تابع ()mysql_data_seek در php...

در PHP بارها پیش می آید بعد از کوئری SELECT از تابع ()mysql_fetch_assoc یا تابع ()mysql_fetch_array استفاده کنید......

تابع تشخیص پسوند از نام فایل...

تابع زیر پسوند فایل را بر می گرداند. function ext($file_name) { return substr($file_name, strrpos($file_name, '.') + 1); }...