PDA

View Full Version : سوال: تبدیل byte[] به Object و بلعکس



voice.of.silence
دوشنبه 02 مهر 1397, 19:18 عصر
سلام دوستان:
من می خوام که کلید hmacsha512 که یکی از روشهای هش کردن است رو در پایگاه داده ذخیره کنم و موقع ورود به برنامه گذر واژه رو هش کرده با استفاده از کید موجود ودر صورت درست بودن وارد برنامه شد.
ستون مورد ننیاز پایگاه داده از نوع(varbinary(8000است.
زمانی که می خوام object رو به byte[] تبدیل کنم فقط مقدار 256 رو بر می گردونه و وقتی می خوام که بایت رو به آبجکت تبدیل کنم برنامه با خطا رو به رو می شه.
خوشحال می شم اگه منو در این مورد کمک کنید.
با سپاس فراوان.
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


namespace Hash_Hash
{
public class cls_convertor
{
public byte[] object_to_byte(object input)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, input);
return ms.ToArray();


}
//end of method.


public object byte_to_object(byte[] input)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
ms.Write(input, 0, input.Length);
ms.Seek(0, SeekOrigin.Begin);
var obj = bf.Deserialize(ms);
return obj;


}

}


}

Mahmoud.Afrad
دوشنبه 02 مهر 1397, 19:41 عصر
متوجه نشدم برای چی به این تبدیلات نیاز دارید.

voice.of.silence
سه شنبه 03 مهر 1397, 06:19 صبح
سلام. می خوام که کلید هش رو در پایگاه داده ذخیره کنم. وقتی که از پایگاه داده فرامی خوانم به صورت آبجکت است و باید آن رو اول به بایت تبدیل کنم تا سپس عملیات هش کردن رمز ورود انجام شود. نوع هش hmacsha512 می باشد.

farhad_shiri_ex
سه شنبه 03 مهر 1397, 09:10 صبح
سلام. می خوام که کلید هش رو در پایگاه داده ذخیره کنم. وقتی که از پایگاه داده فرامی خوانم به صورت آبجکت است و باید آن رو اول به بایت تبدیل کنم تا سپس عملیات هش کردن رمز ورود انجام شود. نوع هش hmacsha512 می باشد.


using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


namespace Hash_Hash
{
public class cls_convertor
{
public byte[] object_to_byte(object input)
{

// #1 ToArray() method works when the MemoryStream is closed.
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, input);
ms.close();
return ms.ToArray();

//#2 or use the using(){} command and autoclose object.
/*
var bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
bf.Serialize(ms, input);
return ms.ToArray();
}
*/

}
//end of method.


public object byte_to_object(byte[] input)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
ms.Write(input, 0, input.Length);
ms.Seek(0, SeekOrigin.Begin);
var obj = bf.Deserialize(ms);
ms.close();
return obj;


}

}


}

یه تغییراتی دادم ولی چون دسترسی به ویندوز و ویژوال استودیو ندارم تست نکردم در باره سوال دوم هم بهتره که پیغام خطا را اینجا بذارید.
وقتی از کلاس memory stream استفاده میکنید و از محتوی مورد اشاره کلاس می خواهید استفاده کنید باید کلاس memory stream را با دستور close از حافظه خارج کنید تا عملیات نوشتن و خواندن از کلاس و کپی عمیق از شی کلاس اتفاق بیفته حالاچه خروجی به بایت رشته ای بخواهید و چه یک آبجکت از کلاس بخواهید ویا از دستور using استفاده کنید تا خود کامپایلر مسئول بستن کلاس باشه البته کلاسهایی که اینترفیس IDisposable را پیاده سازی کرده باشند می توانند از متد using استفاده کنند

Mahmoud.Afrad
سه شنبه 03 مهر 1397, 20:28 عصر
سلام. می خوام که کلید هش رو در پایگاه داده ذخیره کنم. وقتی که از پایگاه داده فرامی خوانم به صورت آبجکت است و باید آن رو اول به بایت تبدیل کنم تا سپس عملیات هش کردن رمز ورود انجام شود. نوع هش hmacsha512 می باشد.

کافی هست مقدار دریافتی را به آرایه ای از بایتها cast کنید
http://barnamenevis.org/showthread.php?407117-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%A8%D8%A7%D9%86%DA%A9-(%D8%AF%D8%B1-%D8%AE%D9%88%D8%AF-%D8%A8%D8%A7%D9%86%DA%A9-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%85%DB%8C-%D8%B4%D9%88%D8%AF)