PDA

View Full Version : گفتگو: رمزنگاری اطلاعات در دیتابیس



DelDard
یک شنبه 21 دی 1393, 18:43 عصر
سلام دوستان
من برای دخیره برخی اطلاعات کاربرها تو سایت که ممکنه در صورت افشا براشون مزاحمت ایجاد کنه (مثل ادرس و تلفن) یه سیستم رمزنگاری برگشت پذیر نیاز دارم
تو نت گشتم اینو پیدا کردم و به نظرم خوب اومد و استفاده کردم



$enc_key = 'mykey123456' ;
$estring = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($enc_key, ($i % strlen($enc_key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$estring .= $char;
}


اما بعدا که یه کم تحقیق کردم دیدم این جور الگوریتم ها اصلا امن نیست و طرف با چند بار ازمون خطا میتونه پیداشون کنه
اصلا این که ما از توابع اماده در php مثل mcrypt_encrypt استفاده کنیم بهتره یا خودمون یه الگوریتم بسازیم یا هر دو با هم؟

کسی یه کلاس یا تابع رمزنگاری مطمعن سراق داره که لینک بده یا اپ کنه لطفا؟؟ یه چیزی که هک نشه
البته از لحاظ تئوری "غیر قابل هک" وجود نداره و من هم طبیعتا یه چیزی در حد پنتاگون یا NSA نمیخام ولی در همین حد که یه الگوریتمی باشه که تا حالا توسط هیچ کس هک شدنش ثبت نشده باشه.
فکر کنم چنین چیزی قطعا وجود داره ولی من چون اشنایی ندارم نمیدونم چی از همه بهتره! از دوستانی که حرفه ای هستند در این زمینه ممنون میشم راهنمایی بفرمایند

DelDard
دوشنبه 22 دی 1393, 17:29 عصر
Up Up Up Up

id1385
دوشنبه 22 دی 1393, 21:28 عصر
این مورد رو ببین
همونطور که می بینی همون عدد 122589 هست که کد میشه و بصورتی هست که هر بار با بار قبلی فرق داره
روی این هم تحقیق کن اگه خوب بود اتچ می کنم

http://mariagreenhouse.com/%D9%86%D9%85%D9%88%D9%86%D9%87

یه عکس هم اتچ کردم که توش به دو روش انکریپت شده و تمامی این موارد قابل بازیابی و انکریپت با کد می باشند

DelDard
چهارشنبه 24 دی 1393, 00:25 صبح
ممنون ازت
این که هر بار خروجی تغیر کنه خاصیت خوبیه
ممنون میشم کدش رو بزاری چون با دیدن خروجی رمزنگاری چندان نمیشه در باره امنیتش قضاوت کرد و باید اون الگریتمی که استفاده شده رو دید

تشکر فراوان دارم

id1385
چهارشنبه 24 دی 1393, 00:51 صبح
با سلام
دوستان برای ایجاد این کلاس تحقیقات زیادی انجام دادم تا به مرور به چنین کلاسی تبدیل شده است، برای سرعت هم تست کردم که در 100.000 درخواست هم زمان قابل قبول بود.
اگه بازم دیدید باگ و یا خطایی داره لطفاً همین جا مطرح کنید تا برطرف بشه و برای عموم قابل استفاده باشه

موفق باشید

id1385
پنج شنبه 25 دی 1393, 15:26 عصر
با سلام
از اساتید کسی کلاس بالا رو تست کرد ؟

ciph3r
پنج شنبه 25 دی 1393, 18:49 عصر
اون برنامت لاین 206 خطا میده

Parse error: syntax error, unexpected '[' in C:\xampp\htdocs\array version\Encryption.php on line 206

id1385
پنج شنبه 25 دی 1393, 19:15 عصر
لاین 206 به این شکل عمل کنید، ورژن php شما پایینه بخاطر اونه


if (isset($return) && in_array($return, array("A", "B", "C", "D"))) {


فایل اصلاح شده برای همه ورژنها ضمیمه شد

beh3000
جمعه 26 دی 1393, 09:36 صبح
استاد نیستم که نظرمو اعلام کنم ولی در حد خودم یه چیزی میگم ... قبلا از یک تابع ساده تری استفاده میکردم که مثل تابع شما نبود که هر دفعه تغییر کنه برای هر رمزی با یک کلید مشخصی خروجی مشخصی میداد ولی مشکلش این بود که سه چهار رمز نزدیک به هم رو یکی تشخیص میداد , مال شما خیلی از اون تابع بهتره ولی باز هم این مشکل رو داره البته مشکل خیلی بزرگی به حساب نمیاد چونکه طول رمز خیلی زیاده ... فقط خواستم بگم اصلا ایرادی نمیگیرم خیلی هم عالی ... ممنون

مثال :

رمز : 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644351 نتیجه دیکد درست : id1985
رمز : 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644352 نتیجه درست
رمز : 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644353 نتیجه درست
رمز : 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644354 نتیجه درست

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

id1385
جمعه 26 دی 1393, 10:17 صبح
متوجه نشدم این موردو دقیقاً منظورتون چیه ؟؟



استاد نیستم که نظرمو اعلام کنم ولی در حد خودم یه چیزی میگم ... قبلا از یک تابع ساده تری استفاده میکردم که مثل تابع شما نبود که هر دفعه تغییر کنه برای هر رمزی با یک کلید مشخصی خروجی مشخصی میداد ولی مشکلش این بود که سه چهار رمز نزدیک به هم رو یکی تشخیص میداد , مال شما خیلی از اون تابع بهتره ولی باز هم این مشکل رو داره البته مشکل خیلی بزرگی به حساب نمیاد چونکه طول رمز خیلی زیاده ... فقط خواستم بگم اصلا ایرادی نمیگیرم خیلی هم عالی ... ممنون

id1385
جمعه 26 دی 1393, 11:05 صبح
فایل تست:

<style>
.code{
color:#141848;
font-size: 12px;
display: block;
font-family: monospace;
white-space: pre;
}


.dec{
padding-left: 15px;
color: #E94B4B;
}
</style>
<?php


error_reporting(TRUE);
define("DEBUGE_MODE" , TRUE);
$Start = microtime_float();
define("SECRET_KEY", "uzmP@3X_e~{(,>rB,J2e;v;Yn8m45u9R");


include_once(dirname(__FILE__) . '/Encryption.php');
$e = new Encryption(SECRET_KEY);
$string = "id1985"; /*$e->generate_rnd(20);*/
echo '<div class="code">Test: </div>';
echo "-Method 1------------------------------------";
for ($i = 0 ; $i <= 9; $i++){
$enc = $e->CreateToken($string);
$dec = $e->TranslateToken($enc);
echo '<div class="code">'. $enc.'<span class="dec">'.$dec.'</span></div>';
}
echo "-Method 2------------------------------------";
for ($i = 0 ; $i <= 9; $i++){
$enc = $e->CreateToken($string, true);
$dec = $e->TranslateToken($enc , true);
echo '<div class="code">'. $enc.'<span class="dec">'.$dec.'</span></div>';
}
echo "-Method 1 [RND]------------------------------------";
for ($i = 0 ; $i <= 9; $i++){
$string = $e->generate_rnd(20);
$enc = $e->CreateToken($string);
$dec = $e->TranslateToken($enc);
echo '<div class="code">'. $enc.'<span class="dec">'.$dec.'</span></div>';
}
echo "-Method 2 [RND]------------------------------------";
for ($i = 0 ; $i <= 9; $i++){
$string = $e->generate_rnd(20);
$enc = $e->CreateToken($string, true);
$dec = $e->TranslateToken($enc, true);
echo '<div class="code">'. $enc.'<span class="dec">'.$dec.'</span></div>';
}

$End = microtime_float();
echo '<hr>';
echo "Time: " . ($End - $Start) . " sec";


function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}

beh3000
جمعه 26 دی 1393, 12:35 عصر
مثال زدم که ... مثلا شما اومدین این رشته رو "id1985" رو کد کردین شده این رشته
66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644351
همین رو اگه دیکد کنیم نتیجه میشه id1985 این که درست ولی :

رشته 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c394664435

2

رو که دیکد کنیم باز هم نتیجه id1985 خواهد بود

رشته 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644353 رو که دیکد کنیم باز هم نتیجه id1985 خواهد بود

رشته 66427068746e587535556459783051666a4464627459765171 4d426c6c492d6930496f75374c3946644354 رو که دیکد کنیم باز هم نتیجه id1985 خواهد بود


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