سلام
من از Identity در پروژه هام استفاده میکنم، code که برای تائید ارسال میشه 6 رقمی هست، چجوری میتونم 4 رقمی کنم طول کد تائید ارسالی
کد رندوم ۴ رقمی تولید کنید
مثلا
Random.rand(1000,9999)
سلام، احتراما من سوالمو بد مطرح کردم:
برای جنریت کد من به شکل ذیل عمل کردم
public string GeneratedCode(string UserId, string Phone)
{
var user = UserId;
var mobile = Phone;
var time = DateTime.Now;
var timeIs = time.Hour + ":" + time.Minute;
var mobileBytes = Encoding.ASCII.GetBytes(mobile);
var timeByte = Encoding.ASCII.GetBytes(timeIs);
var SaltBytes = Combine(mobileBytes, timeByte);
var userBytes = Encoding.ASCII.GetBytes(user);
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(userBytes, SaltBytes, 10000);
var hashPassword = Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(128));
string numericPhone = new String(hashPassword.Where(Char.IsDigit).ToArray());
string code = numericPhone.Substring(0, 4);
return code;
}
این کلاس UserId و Phone رو میگیره و یه Salt میسازه بر اسای phone و ساعت و دقیقه لحظه
و بعد این salt رو با UserId با هم هش میکنه و از هش کد ایجاد شده 4 رقم که فقط عددی هست رو برمیگردونه
public bool VerifyCode(string UserId, string Phone, string Code)
{
var user = UserId;
var mobile = Phone;
var time = DateTime.Now;
var timeIs = time.Hour + ":" + time.Minute;
var mobileBytes = Encoding.ASCII.GetBytes(mobile);
var timeByte = Encoding.ASCII.GetBytes(timeIs);
var SaltBytes = Combine(mobileBytes, timeByte);
var userBytes = Encoding.ASCII.GetBytes(user);
var rfc2898DeriveBytes = new Rfc2898DeriveBytes(userBytes, SaltBytes, 10000);
var hashPassword = Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(128));
string numericPhone = new String(hashPassword.Where(Char.IsDigit).ToArray());
string Generatecode = numericPhone.Substring(0, 4);
if (Code == Generatecode)
return true;
else
return false;
}
بعد یه کلاس دیگه برای تائید code ایجاد کردم به شکل بالا، که یه Code هم ورودی بیشتر داره و همون مقدار هارو با Code چک میکنه اگر اوکی باشه true برمی گردونه
در ضمن این کد 4 رقمی فقط برای همون دقیقه ایجاد شده مورد تائیده یعنی اگر یک دقیقه بگذره یه کد دیگه جنریت میشه
یه کلاس دیگه هم برای combine کردن Byte ها هست که به شکل ذیل پیاده سازی کردم
public byte[] Combine(byte[] first, byte[] second)
{
byte[] ret = new byte[first.Length + second.Length];
byte[] PrivateText = Encoding.ASCII.GetBytes("https://fluttertips.ir");
Buffer.BlockCopy(first, 0, ret, 0, first.Length);
Buffer.BlockCopy(second, 0, ret, first.Length, second.Length);
Buffer.BlockCopy(PrivateText, 0, ret, first.Length, PrivateText.Length);
return ret;
}
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)