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

۷ سال پیش(به روز شده در ۷ سال پیش) پی اچ پی(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 foo() { function bar() { echo "Hello World!"; ...

تابع ایجاد پسورد یا رمز عبور خودکار(password generator)...

این تابع رمز عبور تصادفی ایجاد می کند. رمز عبورهای تصادفی مصارفی بسیاری مخصوصا در سیستمهای مدیریت کاربر دارند......

توابع next , prev , end , current , reset در php...

این توابع مرتبط با آرایه ها هستند و وظیفه آنها اشاره به مقادیر آنهاست. در آرایه هایی که اندیسها یا کلیدهای آنها غیر عددی است , دسترسی به مقدار کمی متفاوت تر خواهد بود. هر چند که این توابع برای اندیسها...

تابع حذف فایل در صورت وجود...

تابع زیر فرآیند ساده‌ای دارد. ابتدا بررسی می کند که آیا فایل وجود دارد یا خیر. در صورت وجود آنرا حذف می‌کند. function delFile( $file_name ) { if ( file_exists( $file_name ) ) // Does '$fi...