PDA

View Full Version : رمز کردن لینک!



iranme
سه شنبه 15 مرداد 1392, 10:41 صبح
سلام،

من یک لینک دانلود دارم که میخوام به صورت رمز شده برای کاربرها نمایش داده بشه و میخوام که بشه هر چند ساعت یکبار هم با تغییر کلید رمزنگاری لینک هم عوض بشه.
یک مثال ساده هم لینک های دانلود سایت filehippo (http://filehippo.com)هست که میخوام کاملا مثل اون بشه.

من این دو تا تابع رو از جای دیگر بدست آوردم و کار هم میکنه ولی مشکلم اینه که تعداد کاراکترهاش خیلی زیاده و متاسفانه هم نتونستم الگوریتم دیگه ای واسه اینکار پیدا کنم.


$key = 'key';
$string = 'string';

$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

echo($encrypted);
echo "<br />";
echo($decrypted);

من میخوام لینک هام همشون 32 کاراکتری باشن (مثل md5) ولی قابل بازگشت که درون دیتابیس ذخیره نشه ولی متاسفانه در این مثال بالا به خاطر استفاده از base64 کاراکترها بیشتر هستند!

ممنون میشم راهنمایی کنید

iranme
سه شنبه 15 مرداد 1392, 13:32 عصر
کسی نیست بتونه من رو راهنمائی کنه!؟ واسه php اینکد دو طرفه که 32 کاراکتری باشه چی هست!؟

iranme
سه شنبه 15 مرداد 1392, 19:33 عصر
کسی نمیتونه کمک کنه؟ کارم گیره! به غیر از اینکد base64_encode چه چیزهایی تو php هست؟

SilverLearn
سه شنبه 15 مرداد 1392, 22:06 عصر
دوست عزیز ببین مثال های زیر می تونه کمکت کنه !

http://php.net/manual/en/function.urlencode.php

iranme
سه شنبه 15 مرداد 1392, 23:03 عصر
دوست عزیز ببین مثال های زیر می تونه کمکت کنه !

http://php.net/manual/en/function.urlencode.php

نه داداش این ها رو نگاه کردم! به دردم نخورده

فکر کنم نتونستم دقیق منظورم رو بیان کنم!
شما به آخر لینک زیر دقت کنید:

http://www.filehippo.com/download_firefox/download/643f49aa2e233ae8894a6e52e9c14b69/

همونطور که میبینید یک رشته 32 کاراکتری رو تشکیل داده و هر چند ساعت یکبار هم این رشته تغییر میکنه! میخوام یک لینکی مثل این داشته باشم و بتونم هر موقع که خواستم با تغییر کلید این رشته رو عوض کنم.

omidabedi
چهارشنبه 16 مرداد 1392, 00:04 صبح
خودت یه هش برگشت پذیر بنویس
مثلا اسم برای هر حروف یه عدد یا یه کارکتری در نظر بگیر بعد تابعی بنویس که اسم فایل رو به عدد تبدیل کنه
و مثلا تاریخ دانلود رو به اخرش اضاف کنه

omidabedi
چهارشنبه 16 مرداد 1392, 00:06 صبح
نه داداش این ها رو نگاه کردم! به دردم نخورده

فکر کنم نتونستم دقیق منظورم رو بیان کنم!
شما به آخر لینک زیر دقت کنید:

http://www.filehippo.com/download_firefox/download/643f49aa2e233ae8894a6e52e9c14b69/

همونطور که میبینید یک رشته 32 کاراکتری رو تشکیل داده و هر چند ساعت یکبار هم این رشته تغییر میکنه! میخوام یک لینکی مثل این داشته باشم و بتونم هر موقع که خواستم با تغییر کلید این رشته رو عوض کنم.


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

Unique
چهارشنبه 16 مرداد 1392, 01:29 صبح
احتمال میدم شما میخواین این کار را بکنین تا کسی نتونه لینک های شما را توی سایش بگذاره و ترافیک را بده به شما !
خوب نیاز به encode کردن نیست ! شما کافیه از همون md5 استفاده کنید و یک لینک سالم بسازین که شماره رکورد مرتبط با فایل توی لینک باشه ! اما لینک باید حتما یک hash معتبر داشته باشه ! اینطوری که مثلا بیاین شماره رکورد را با اینکه مثلا ساعت در چه ربعی از روز قرار داره یعنی ۳ و ۶ و ۹ و ۱۲ و ۱۵ و ۱۸ و ۲۱ و ۰ و اینکه امروز چه روزیه را با یک salt و pepper تبدیل به hash کنید و وقتی لینک دانلود صدا زده میشه بخش hash را صحتش را چک کنید ! اینطوری هر ۳ ساعت شما یک لینک معتبری دارین که هیچکدوم شبیه قبلی نیست !

موفق باشین.

iranme
چهارشنبه 16 مرداد 1392, 10:05 صبح
خودت یه هش برگشت پذیر بنویس
مثلا اسم برای هر حروف یه عدد یا یه کارکتری در نظر بگیر بعد تابعی بنویس که اسم فایل رو به عدد تبدیل کنه
و مثلا تاریخ دانلود رو به اخرش اضاف کنه

میشه با مثال توضیح بدید؟

iranme
چهارشنبه 16 مرداد 1392, 13:51 عصر
احتمال میدم شما میخواین این کار را بکنین تا کسی نتونه لینک های شما را توی سایش بگذاره و ترافیک را بده به شما !
خوب نیاز به encode کردن نیست ! شما کافیه از همون md5 استفاده کنید و یک لینک سالم بسازین که شماره رکورد مرتبط با فایل توی لینک باشه ! اما لینک باید حتما یک hash معتبر داشته باشه ! اینطوری که مثلا بیاین شماره رکورد را با اینکه مثلا ساعت در چه ربعی از روز قرار داره یعنی ۳ و ۶ و ۹ و ۱۲ و ۱۵ و ۱۸ و ۲۱ و ۰ و اینکه امروز چه روزیه را با یک salt و pepper تبدیل به hash کنید و وقتی لینک دانلود صدا زده میشه بخش hash را صحتش را چک کنید ! اینطوری هر ۳ ساعت شما یک لینک معتبری دارین که هیچکدوم شبیه قبلی نیست !

موفق باشین.

این روشی هم که شما گفتید جالبه ولی متاسفانه به طور کامل متوجه نشدم که اگر هش شده باشه چطور فراخوانی بشه از دیتابیس! میشه یک مثال بنویسسید؟

iranme
چهارشنبه 16 مرداد 1392, 18:07 عصر
کسی هست یک مثال برای هش برگشت پذیر بگه بهم؟

iranme
چهارشنبه 16 مرداد 1392, 21:42 عصر
دوستان omidabedi و Unique و یا بقیه دوستان کسی هست با مثال این را برای من توضیح بدهد؟

omidabedi
چهارشنبه 16 مرداد 1392, 21:56 عصر
میشه با مثال توضیح بدید؟

در توابع php دنبالشون بگردی توابعی هست برای کار با txt که uppercase کنه,تاریخو چاپ کنه و مثل اینا

Unique
پنج شنبه 17 مرداد 1392, 01:43 صبح
دوست عزیز ،‌ راستش من روشم اصلا عجیب و پیچیده نیست ، ساده مثال میزنم بدون htaccess و اینا ُشما باید چنین لینک هایی درست کنی :

http://www.mysite.com/download.php?id=100&hash=643f49aa2e233ae8894a6e52e9c14b69

خوب ، حالا شما با توجه به شماره رکورد فایل که id باشه میتونی فایل را شناسایی کنی ! اما به شرطی اجاز دانلود میدی که : salt (هر ترکیبی که دوست داری مثلا adsadS43#) + شماره id + ربع ساعت شبانه روز که در پست قبل توضیح دادم + تاریخ جاری بدون زمان +‌ pepper (بازم هر ترکیبی که دوست داری) + ۲۰۰۰ بار هم md5 کنش ! برابر با مقدار hash شما باشه ! تازه از ip خودش هم میتونی استفاده کنی که دیگه نور علی نور بشه ! کسی اگه همه پارامتر های دیگه را هم بدونه دیگه ip طرف را نمیتونه کنترل کنه !

اینجوری هر ۳ ساعت یک hash منحصر به فرد داری ! و کسی هم اگه لینک شما را بگذراه توی سایتش فقط ۳ ساعت اعتبار داره ! حالا دلت خواست اعتبار را به ۱ ساعت یا حتی ۱۰ دقیقه هم میتونی برسونی و فقط محاسباتش زمانیش عوض میشه ! مثلا باید ببینی ۱۰ دقیقه چندم از ۲۴ ساعته و غیره ....

توجه : استفاده از اصطلاح salt و pepper فقط برای بیان راحت استفاده شد و در مباحث علمی و آکادمیک به روش های دیگه ای شناخته میشه ! پس لطفا گیر آکادمیک ندین.

iranme
جمعه 18 مرداد 1392, 11:13 صبح
دوست عزیز ،‌ راستش من روشم اصلا عجیب و پیچیده نیست ، ساده مثال میزنم بدون htaccess و اینا ُشما باید چنین لینک هایی درست کنی :

http://www.mysite.com/download.php?id=100&hash=643f49aa2e233ae8894a6e52e9c14b69

خوب ، حالا شما با توجه به شماره رکورد فایل که id باشه میتونی فایل را شناسایی کنی ! اما به شرطی اجاز دانلود میدی که : salt (هر ترکیبی که دوست داری مثلا adsadS43#) + شماره id + ربع ساعت شبانه روز که در پست قبل توضیح دادم + تاریخ جاری بدون زمان +‌ pepper (بازم هر ترکیبی که دوست داری) + ۲۰۰۰ بار هم md5 کنش ! برابر با مقدار hash شما باشه ! تازه از ip خودش هم میتونی استفاده کنی که دیگه نور علی نور بشه ! کسی اگه همه پارامتر های دیگه را هم بدونه دیگه ip طرف را نمیتونه کنترل کنه !

اینجوری هر ۳ ساعت یک hash منحصر به فرد داری ! و کسی هم اگه لینک شما را بگذراه توی سایتش فقط ۳ ساعت اعتبار داره ! حالا دلت خواست اعتبار را به ۱ ساعت یا حتی ۱۰ دقیقه هم میتونی برسونی و فقط محاسباتش زمانیش عوض میشه ! مثلا باید ببینی ۱۰ دقیقه چندم از ۲۴ ساعته و غیره ....

توجه : استفاده از اصطلاح salt و pepper فقط برای بیان راحت استفاده شد و در مباحث علمی و آکادمیک به روش های دیگه ای شناخته میشه ! پس لطفا گیر آکادمیک ندین.

خیلی ممنون از توضیحتون ولی من مثال را برای این خواستم که نمیدونم چجوری باید این مواردی که گفتین را هش کنم! salt و pepper اصلا چی هستند؟

یک نکته دیگر هم اینکه فایل های من درون سرور دیگه ای هستش، آیا راهی برای اون هم هست که نشه لینک اصلی را در آورد؟ چون تا جائیکه من فهمیدم این روشها برای فایلهایی کاربرد داره که تو همون سروری باشند که سایت هم قرار داره!

Unique
شنبه 19 مرداد 1392, 01:48 صبح
خیلی ممنون از توضیحتون ولی من مثال را برای این خواستم که نمیدونم چجوری باید این مواردی که گفتین را هش کنم! salt و pepper اصلا چی هستند؟
هش رامیتونی با تابع md5 انجام بدی !salt و pepper را هم بیخیال ! از یک رشته قبل و بعد اطلاعاتت به صورت randome و غیر قابل حدث استفاده کن مثل پسورد !


یک نکته دیگر هم اینکه فایل های من درون سرور دیگه ای هستش، آیا راهی برای اون هم هست که نشه لینک اصلی را در آورد؟
شما برای جلوگیری از دسترسی بدون عضویت یا محدود شده به هر طریقی باید روی سرور فایل ها php داشته باشی و عضویت داشتن کاربر یا valid بودن hash برای عدم انتقال ترافیک به شما را بررسی کنید و با header و .... فایل را ارسال کنید.

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

خوش و خرم باشی‌!