نوشته شده توسط
voice.of.silence
سلام. می خوام که کلید هش رو در پایگاه داده ذخیره کنم. وقتی که از پایگاه داده فرامی خوانم به صورت آبجکت است و باید آن رو اول به بایت تبدیل کنم تا سپس عملیات هش کردن رمز ورود انجام شود. نوع هش 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 استفاده کنند