سلام
نکته اول اینکه، آن روز بسیار کار داشتم و کد را سریع نوشتم و دو حالت را با هم اشتباه کردم.
بجای متد TransformFinalBlock باید متد ComputeHash را مینوشتم.
کد قبلی را اصلاح کردم.
عضرخواهی میکنم.
نوشته شده توسط:
booysusa
معنی این چی هست جناب شریفی گرامی "-"
چیز خاصی نیست، همان خط تیره است.
گفتم بگذارید تا سه کدی که داشتید تولید میکردید را بتوانید جداگانه از هم ببینید و متوجه شوید هر کدام چه برگردانده و چند کاراکتر است.
آن زمان، کد شما سه مقدار GetProcessorId و GetHDDSerialNo و GetBIOSserNo را تولید میکردید که یکی خارج از انتظار اولیه شما بود.
اول هدف ام آن بود که ، خروجی شبیه این A123-B456-C789 روی مانیتور دیده شود و متوجه شوید کدام سریال خالی است یا کاراکتر کمتری دارد.
بگذریم ...
نوشته شده توسط:
booysusa
این تصویر خطاش هست
تازه کدتان را دانلود کردم و دیدم.
متوجه شدم رویداد frmRegister_Activated دارید که در آن متد Encrypt_Activation ای را فراخوانی کرده اید که مثلا کدفعال-سازی را به شیوه عجیبی رمز میکند!
شیوه اش مهم نیست ولی این کد مشکل کوچکی دارد.
یک راست متغییری به نام ch را با طول ثابت میسازد ، بدون توجه به اینکه ورودی چند کاراکتر است.
کافی است طول آرایه برابر طول ورودی باشد:
public string Encrypt_Activation(string str)
{
char[] ch = new char[str.Length ] ;
for (int i = 0; i < str.Length; i++)
{
ch[i] = (char)(str[i] + 10) ;
}
string result = new string(ch) ;
return "M" + result + "Sh" ;
}
گرچه رمزنگاری ابتکاری است ولی ... با دیدن این کد Encrypt_Activation شما و دیدن برنامه تان، حالا پیشنهاد میکنم به کد قبلی خودم هم یک
Replace( "-" , "" ) اضافه کنید.
کد نهایی توابع اصلاح شده ، چیزی شبیه این میشود:
private void frmRegister_Load(object sender, EventArgs e)
{
this .txtActivation.Text = GetHardwareSerial() ;
}
public static string GetHardwareSerial()
{
return MD5(HardwareInfo.GetProcessorId() + "-" + HardwareInfo.GetHDDSerialNo() + "-" + HardwareInfo.GetBIOSserNo()) ;
}
public static string MD5(string text)
{
if (string .IsNullOrEmpty(text)) return string .Empty;
byte [] buffer = System.Text.Encoding.UTF8.GetBytes(text) ;
using (var hash = System.Security.Cryptography.MD5.Create())
{
buffer = hash.ComputeHash(buffer, 0, buffer.Length) ;
}
return BitConverter.ToString(buffer).Replace( "-", "" ) ;
}
public string Encrypt_Activation(string str)
{
char [] ch = new char [str.Length] ;
for (int i = 0; i < str.Length; i++)
{
ch[i] = (char )(str[i] + 10) ;
}
string result = new string (ch) ;
return "M" + result + "Sh" ;
}
دقت کنید که کل کدهای شما و فرآیند داخلی برنامه را بررسی نکردم، با کد بالا صفحه اول برنامه تان باز خواهد شد، بقیه را کنترل نکردم. موفق باشید.