ryokoという言葉を一方向ハッシュ関数を自作して暗号化してみる。
package main import ( "fmt" ) func main() { hash := CreatHash("ryoko") fmt.Println(hash) } func CreatHash(p string) string { b := []byte(p) fmt.Println(p) fmt.Println(b) return "" }
func CreatHash(p string) stringで文字列を変数と型にもつCreatHash関数を作成する。CreatHash関数は、b := []byte(p)で、変数pをバイト型の変数bに変換するという意味の関数になる。また、CreatHash関数は、文字列を返り値としてもつので、return ""で空文字を返すように設定する。
これで、CreatHash関数ができたので、上記のように"ryoko"という文字列をCreatHash関数に入れてみる。そうすると、下記のように表示される。
ryoko
[114 121 111 107 111]
まず、ryokoは変数pにあたるので、そのまま代入したものが表示され、バイト型に変換されたbにあたるものが、[114 121 111 107 111]の数字となる。
次に下記のコードを書き換えて、バイト型の数字を文字列に変換する。
func CreatHash(p string) string { b := []byte(p) hashbyte := sha256.Sum256(b) fmt.Println(hashbyte) hash := hex.EncodeToString(hashbyte[:]) return hash }
hashbyte := sha256.Sum256(b)で、文字列からsha256ハッシュ値を求めて、出てきたバイトを文字列に直して返す。
hex.EncodeToStringで16進法の値に変換する。
そうすると、下記のような暗号化された文字列が作成される。
db08d212da1b3ec6c2e3c12d1864626c8d125084c4b05767f00627eebb70bede
[Finished in 0.568s]