お世話になっております。
しゃまとんです。

Unity環境とGo環境でSHA256で同一ハッシュ値を得るにはどうしたらいいかと、ちょっと試した時のメモです。

どちらも外部のライブラリ等は不要で対応できます。
これでUnity <–> Goで同じハッシュ値を得ることができます。

以下、コードと実行結果です。
Goの方がコード量が少ないです。

■Unity

using UnityEngine;
using System.Collections;

public class crypt : MonoBehaviour {

    // Use this for initialization
    void Start () {
    string res = sha256("shamaton.orz.hm", "secret_key");
    Debug.Log (res);
    }   

  private string sha256(string planeStr, string key) {
    // バイト化
    System.Text.UTF8Encoding ue = new System.Text.UTF8Encoding();
    byte[] planeBytes = ue.GetBytes(planeStr);
    byte[] keyBytes   = ue.GetBytes(key);

    // SHA256化
    System.Security.Cryptography.HMACSHA256 sha256 = new System.Security.Cryptography.HMACSHA256(keyBytes);
    byte[] hashBytes = sha256.ComputeHash(planeBytes);

    // 文字列化
    string hashStr = "";
    foreach(byte b in hashBytes) {
      hashStr += string.Format("{0,0:x2}", b);
    }
    return hashStr;
  }
}

■Go

package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    // SHA256
    hash := hmac.New(sha256.New, []byte("secret_key"))
    hash.Write([]byte("shamaton.orz.hm"))
    hashSum := fmt.Sprintf("%x", hash.Sum(nil))
    fmt.Println(hashSum)
}
$ go run sha.go
9e3103953957435e407752ec0d4b063058a55338c6ac2e15ea4f07c21f90e10c

以上です。