圖片取得 Hash:
首先 .net core 必須要引入 System.Draw.Common(參考:How do you use System.Drawing in .NET Core?),如此就可以使用 Image 接收 WinForm 傳入的圖檔。
Install-Package System.Drawing.Common -Version 4.5.1
Image to base64 string:
public static string ImageToBase64(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
byte[] bytesImage = ms.ToArray();
return Convert.ToBase64String(bytesImage);
}
}
針對 base64 產生 SHA256 特徵直:
public static string ComputeSha256(string base64)
{
SHA256 sha256 = new SHA256CryptoServiceProvider();
var hash = sha256.ComputeHash(Encoding.Default.GetBytes(base64));
return Convert.ToBase64String(hash);
}
檔案類似,但直接讀取 file bytes 進行 Hash
比對方式:
傳入的圖片:同樣執行 圖片取得 Hash: 後,比對特徵值是否正確。
之後就可以利用特徵值進行簽章。不用 base64 string 的原因是因為圖片轉 base64 檔案大小其實跟原始圖片一樣大,因此可以不需要儲存圖片,只儲存特徵檔的方式處理。
另外也可以透過 base64 還原圖片與檔案,作法如下:
圖片還原:
public static Image Base64ToImage(string base64)
{
byte[] bytesImage = Convert.FromBase64String(base64);
using (MemoryStream ms = new MemoryStream(bytesImage, 0, bytesImage.Length))
{
ms.Write(bytesImage, 0, bytesImage.Length);
return Image.FromStream(ms);
}
}
檔案還原:
public static void Base64ToFile(string base64, string filepath)
{
Byte[] bytes = Convert.FromBase64String(base64);
File.WriteAllBytes(filepath, bytes);
}

