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]