如何在 .net core 將圖片、檔案轉成 Base 64 字串

圖片取得 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);

}

 

Azure WordPress 加入網域名稱

有發現使用 azurewebsites 這樣的網域不容易被搜尋引擎所喜愛,因此文章的散佈度低。想要試試看使用自定義的網域名稱可否加強 SEO。

首先可以使用免費的網域名稱服務: https://nctu.me/ 具體教學可以參閱:《NCTU.ME DOMAIN HOSTING》永久免費網域 – 教學

然而加入之後,要想可以跟 AZURE WEB 連結,還需要設定 A & CNAME,

其中 A 可以透過 AZURE 查詢固定 IP:

查詢正確後,就可以使用 NCTU.ME 的 DNS 服務,加入到 DNS 內:

在這裡設定之後,就需要再 AZURE 中,定義對應的網域: