ژوپین
  1. خانه
  2. بلاگ
  3. آموزش
  4. آموزش php
  5. رمزگذاری یا مبهم سازی شماره موبایل و ذخیره در دیتابیس

رمزگذاری یا مبهم سازی شماره موبایل و ذخیره در دیتابیس

آموزشآموزش php

نکات مهم این مطلب

رمزگذاری شماره همراه یا موبایل و ذخیره در دیتابیس جهت امنیت

هش کردن یا کد کردن شماره همراه یا موبایل با الگریتم اختصاصی

چگونه امنیت شماره همراه های ذخیره شده در دیتابیس را در صورت هک فراهم کنیم

جلوگیری از به دست آوردن لیست شماره های همراه درون دیتابیس توسط هکر

الگریتم اختصاصی برای هش کردن یا کد کردن و سپس دیکد یا رمزگشایی شماره همراه (موبایل)

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


چرا لازم است شماره همراه به صورت هش شده در دیتابیس ذخیره شود؟


شماره همراه و موبایل کاربران یا هر شخصی اصولا جزء موارد شخصی و حریم خصوصی وی میباشد و زمانی که کاربر به ما اعتماد میکند و جهت ثبت نام یا هر فرایند دیگری این شماره همراه را به ما میسپارد ، ما وظیفه داریم از این شماره همراه محافظت کنیم تا به دست افراد و هکر ها نیافتد.


شاید بپرسید:


مگر کسی به دیتابیس ما دسترسی دارد که بتواند لیست کاربران و شماره های موبایل آنها را اکسپورت یا استخراج کند؟


بله ممکن است وب سایت شما هک شود و فایل کانفیگی که اطلاعات دیتابیس در آن است به دست شخص هکر بیافتد و به راحتی به دیتابیس دسترسی پیدا کند و یا با تزریق کد در یکی از فایل های وب سایت شما و نوشتن چند کوئری ساده ، لیست هرچه نیاز دارد را به دست آورد.


شاید شما برای تعمیرات و یا ارتقا و نصب افزونه ای ، اطلاعات سی پنل یا سیستم مدیریت سرور را به یک برنامه نویس بدهید تا بتواند کارهای نصب افزونه یا هر موردی که نیاز است را انجام دهد . در این صورت به راحتی به دیتابیس شما دسترسی دارد و اگر این شخص در کار خود صادق نباشد میتواند به راکتی یک Export از شماره های موبایل همراه با نام افراد بگیرد.


شماره همراه های (موبایل) به دست آمده چه سود و فایده ای برای هکر دارد؟


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


در بدترین حالت هم ممکن است از شماره های همراهی که برای خانم ها می باشد(با توجه به نام کاربر در دیتابیس) در جهت ایجاد مزاحمت استفاده کند.


در هر صورت شما مسئول این سرقت اطلاعات محرمانه هستید و کاربران در صورت پی بردن به این موضوع که شخص هکر یا مزاحم شماره آنها را از دیتابیس شما دزدیده ، میتوانند ادعای عدم حفظ حریم شخصی توسط شما یا شرکت شما را مطرح کنند.


 


در زیر کدهایی را مشاهده خواهید کرد که شامل دو تابع php هستند که یک تابع با نام EncodeMobile وظیفه هش کردن یا کدگذاری شماره همراه را به عهده دارد و تابع دیگر با نام DecodeMobile وظیفه رمزگشایی شماره موبایل کد شده را دارد.


با رمزگذاری شماره همراه کاربر و ذخیره آن در دیتابیس اگر به دست کسی هم بیافتد هیچ فایده ای به حالش ندارد.


البته شاید بگویید این چه کاری است !!!!!!! به راحتی با توابع openssl و کلید میتوان انکد و دیکد کرد. در جواب باید بگوییم که استفاده از این سری توابع آماده در php اولا الگریتمی است که عمومی است و همه میدانند ، هرچند که رمزگشایی آنها هم ساده نیست و دلیل مهم دیگر این است که این توابع آماده مانند openssl و mycrypt یک رشته طولانی حدود 200 کاراکتری ایجاد میکند که در صورت ذخیره در دیتابیس ، حجم آن بالا میرود ولی الگریتم ما هم اختصاصی است و کسی روش آن را نمیداند و هم کلا 32 کاراکتر در هر حالتی ایجاد میکند که به مراتب بسیار سبکتر از موارد قبلی است.


 


تابع کدگذاری:


function EncodeMobile($s){

$l = strlen($s);
$li = $l-1;
$out = '09';
for($i=2;$i<$l;$i++){

$c = substr($s,$i,1);

$o = intval($c);

if($i==$li){

$o = pow(substr($s,$i,1)+$o,2);
}else{
$o = pow(substr($s,$i,1)+substr($s,$i+1,1) ,2);

}

$o = (string) $o;
if(strlen($o) == 1){
$o = '00'.$o;
}elseif(strlen($o) == 2 ){
$o = '0'.$o;
}

$out .= (string) $o;

}
$last = substr($s,$li,1);
$rand = rand(1,9);
$last = $rand.($rand*$last);
if(strlen($last)==2){
$last = '0'.$last;
} elseif(strlen($last)==1){
$last = '00'.$last;
}
$out .= $last;
return $out;
}

 


تابع رمز گشایی:


function DecodeMobile($s){

$l = strlen($s)-3;
$li = $l-1;
$last = (int) substr($s,-2);

$rand = (int) substr($s,strlen($s)-3,1);
if($rand==0){
$rand = (int) substr($s,strlen($s)-3,2);
$last = (int) substr($s,-1);
}
$last = $last/$rand;


$buffer = 0;
$o = '';
$out = [];
$mi = 10;
for($i=$li;$i>=4;$i-=3){


$pi = (int) (substr($s,$i-2,3));

if($i==$li){


$pn = sqrt($pi);
$pn -=$last;

$buffer = $pn;

}else{
$pn = sqrt($pi);

$pn -=$buffer;

$buffer = $pn;

}

$mi -=1;

$out[] = (string)$pn;

}
$out[] = '9';
$out[] = '0';
$out = array_reverse($out);

return implode('',$out);

}

 


 


توجه کنید که این الگریتم با شماره موبایل با فرمت 09XXXXXXXXX کار میکند . البته اگر مثلا فرمت شماره های شما به صورت های دیگر مثل 9XXXXXXXXX یا  +989XXXXXXXXX هست با کمی تغییر کوچک میتوان استفاده کرد.


 


در زیر یک مثال از کارکرد آن آوردیم:


 


$Mobile = "09352659165";

$Encoded = EncodeMobile($Mobile);

echo "Encoded Mobile Number : ".$Encoded;

echo "<b/>";


$Decoded = DecodeMobile($Encoded);

echo "Original Mobile Number By Decoding : ".$Decoded;

 


 


 


 

رمزگذاری یا مبهم سازی شماره موبایل و ذخیره در دیتابیس
نمایش 44
لایک 2
برچسب ها :
php آموزش php آموزش کدگذاری رمزنگاری encoding decoding

نظرات



ارسال نظر

جهت قرار دادن کد در متن کامنت ، متن مورد نظر را انتخاب کنید و دکمه بالا را بزنید

گفتگو با پشتیبان