PDA

View Full Version : سوال: نحوه ساخت شماره یونیک برای نرم افزار



SardareEshgh
سه شنبه 11 تیر 1398, 05:50 صبح
با سلام.
فرض کنید مشتری شماره سریال قطعات سخت افزاری رایانه را برای ما ارسال کرد حالا ما چطوری شماره یونیک درست کنیم و برای مشتری ارسال کنیم تا نرم افزار فعال بشه؟
ممنون

farhad_shiri_ex
سه شنبه 11 تیر 1398, 08:43 صبح
با سلام.
فرض کنید مشتری شماره سریال قطعات سخت افزاری رایانه را برای ما ارسال کرد حالا ما چطوری شماره یونیک درست کنیم و برای مشتری ارسال کنیم تا نرم افزار فعال بشه؟
ممنون

به سادگی با یک رابطه ریاضی با استفاده از اطلاعات سخت افزاری کافی که این اطلاعات را با یک الگوریتم Hash اینکریپت کنید سمت کلاینت هم با اطلاعات سخت افزاری مجددا Hash را بسازید و با Hash دریافتی مقایسه کنید البته برای سخت تر شدن الگوریتم های اینکریپت از تلفیق چند الگوریتم و Check Sum استفاده کنید قطعا بهتر هست که الگوریتم hash را خودتون بنویسیدو با الگوریتم های شناخته شده تلفیق کنید تا شکستن الگوریتم کار ساده ای نباشه

SardareEshgh
سه شنبه 11 تیر 1398, 11:33 صبح
به سادگی با یک رابطه ریاضی با استفاده از اطلاعات سخت افزاری کافی که این اطلاعات را با یک الگوریتم Hash اینکریپت کنید سمت کلاینت هم با اطلاعات سخت افزاری مجددا Hash را بسازید و با Hash دریافتی مقایسه کنید البته برای سخت تر شدن الگوریتم های اینکریپت از تلفیق چند الگوریتم و Check Sum استفاده کنید قطعا بهتر هست که الگوریتم hash را خودتون بنویسیدو با الگوریتم های شناخته شده تلفیق کنید تا شکستن الگوریتم کار ساده ای نباشه

ممنون دوست عزیز .
اگه کد بذارید ممنون میشم

farhad_shiri_ex
سه شنبه 11 تیر 1398, 12:02 عصر
ممنون دوست عزیز .
اگه کد بذارید ممنون میشم

کدی که من قرار بدم که بدردتون نمیخوره! عرض کردم کافی که یک الگوریتم خوب برای hash انتخاب کنید الباقی اش هنر و خلاقیت خودتون را میطلبه!
مثلا از این الگوریتم برای hash استفاده کنید سازگار با ++C#‎‎‎ , C البته خیلی هم خوب نیست چون خیلی سریع نوشتم صرفا برای اینکه ایده بگیرید....

#define MASK_DWORD_BYTE 0xf0000000
unsigned long
hashGenrator(const unsigned char* buffer){
unsigned long h = 0 , g ;
while(*buffer){
h = (h << 4) + *buffer++;
if((g = h & MASK_DWORD_BYTE))
h ^= g >> 24;
h &= ~g;
}
return h;
}


const int MASK_DWORD_BYTE = 0xf0000000;
ulong
hashGenrator(String buffer){
var h = 0UL ;
var g = 0UL ;
var index =0;
while(index <= buffer.Length){
h = (h << 4) + buffer[index++];
if((g = h & MASK_DWORD_BYTE))
h ^= g >> 24;
h &= ~g;
}
return h;
}

SardareEshgh
سه شنبه 11 تیر 1398, 13:07 عصر
فرض بفرمایید سریال سخت افزاری ارسال شده توسط مشتری کد زیر باشد:
7B76-0644-B8FD-E01F-0A96-C321
کد فوق را با رشته زیر جمع میکنم :
@Ali110^karimi
و سپس توسط الگوریتم MD5 به Hash تبدیل میکنم و به مشتری ارسال میکنم.
همین کار هم توسط کلاینت مشتری انجام میشود.
و سپس این دو Hash در نرم افزار مقایسه شده و در صورت برابری نرم افزار فعال میشود.
دو سوال مطرحه :
1-آیا همیشه Hash تولیدی از یک شماره سریال توسط دو طرف یکسان خواهد بود؟
2-امنیت این روش چقدر تضمین شده هست؟
ممنون

farhad_shiri_ex
سه شنبه 11 تیر 1398, 18:24 عصر
1-آیا همیشه Hash تولیدی از یک شماره سریال توسط دو طرف یکسان خواهد بود؟

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




2-امنیت این روش چقدر تضمین شده هست؟

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

دلتنگ اسمان
سه شنبه 11 تیر 1398, 20:09 عصر
بله در صورتی که سریال سخت افزاری همیشه یکتاست خوب قطعا وقتی داری با یک رشته ثابت هم جمع میکنی نتیجه hash یکسان خواهد شد.


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

-------------------------