PDA

View Full Version : سوال: تفاوت در خروجی متد GetHashCode برای سیستمهای 32 بیتی و 64 بیتی. چرا؟؟؟



heivin
سه شنبه 24 شهریور 1388, 18:54 عصر
در یک سیستم 32 بیتی خروجی این متد برای رشته 2009 این است: 1579755242
اما در یک سیستم 64 بیتی خروجی این متد برای همان ورودی این است: 1164901128
چرا؟
بالفرض بنده بخوام کد نرم افزار رو برای یک کاربر بسازم و ارسال کنم حال اگه سیستم هش کاربر با هش من متفاوت باشه مشکل پیش میاد.

Amir Oveisi
سه شنبه 24 شهریور 1388, 20:57 عصر
دلیلش اینه که این متد خروجیش یک Int32 هست و با توجه به اینکه در سیستم های 64 بیتی int 8 بایت هست و نه 4 بایت، مقدار hash متفاوت خواهد بود.

توجه داشته باشید که هیچ وقت از این متد برای کارهاتون استفاده نکنید چون خود مایکروسافت هم تضمینی نداره که این متد بصورت پیش فرض (بدون override) همیشه مقادیر یکتا بده
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

برای استفاده از Hash از الگوریتم هایی مثل MD5, SHA1, SHA2 و ... استفاده کنید که خروجی اون ها آرایه ای از بایت ها با طول مشخص هست و با معماری سیستم تغییری نمیکنه.
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6b1758fa-5436-4c24-a5ce-7aaa50a5b5ff

موفق باشید

heivin
چهارشنبه 25 شهریور 1388, 12:07 عصر
این کلاس چطور آیا به معماری کامپیوتر بستگی داره یا نه؟
استفاده از اون مشکلی ایجاد نمیکنه؟


staticstring getMd5Hash(string input)
{
// Create a new instance of the MD5CryptoServiceProvider object.
MD5 md5Hasher = MD5.Create();
// Convert the input string to a byte array and compute the hash.
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(in put));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = newStringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}

x2 در این خط یعنی چی؟

sBuilder.Append(data[i].ToString("x2"));

Amir Oveisi
چهارشنبه 25 شهریور 1388, 14:51 عصر
نه به معماري وابسته نيست اين الگوريتم.
X2 به اين معني هست كه به مبناي HEX تبديل بشه

heivin
پنج شنبه 26 شهریور 1388, 11:26 صبح
برای ساختن یه قسمت از برنامم به یک الگوریتم هش احتیاج دارم که خروجیش int باشه و قابل اطمینان یعنی در کامپیوترهای مختلف خروجیش برای یک رشته ثابت، یکی باشه
به نظر شما از چه روشی میتونم استفاده کنم

alireza_tavakol
پنج شنبه 26 شهریور 1388, 11:49 صبح
برای ساختن یه قسمت از برنامم به یک الگوریتم هش احتیاج دارم که خروجیش int باشه و قابل اطمینان یعنی در کامپیوترهای مختلف خروجیش برای یک رشته ثابت، یکی باشه
به نظر شما از چه روشی میتونم استفاده کنم

http://barnamenevis.org/forum/showpost.php?p=473977

heivin
جمعه 27 شهریور 1388, 18:57 عصر
http://barnamenevis.org/forum/showpost.php?p=473977
خروجی ایشون برای

MessageBox.Show(encryptString("Sinpin"));
برابر است با:
e140088b10c4f19588ed3624e2b3c463
اما خروجی که بنده برای همین ورودی بدست آوردم: acf7ef943fdeb3cbfed8dd0d8f584731
درضمن بنده خروجی می خوام که تماما عدد باشه