package main

import (
	"crypto/sha256"
	"crypto/sha512"
	"flag"
	"fmt"
	"os"
)

// 练习 4.2： 编写一个程序，默认情况下打印标准输入的SHA256编码，
// 并支持通过命令行flag定制，输出SHA384或SHA512哈希算法。
func main() {
	var shaflag = flag.Int("sha", 256, "sha选择")
	var str = flag.String("s", "default", "需要被加密的字符串")
	flag.Parse()
	fmt.Println(*shaflag, *str)

	sha := func() []byte {
		if *shaflag == 256 {
			s := sha256.Sum256([]byte(*str))
			res := make([]byte, len(s))
			copy(res, s[:])
			return res
		} else if *shaflag == 384 {
			s := sha512.Sum384([]byte(*str))
			res := make([]byte, len(s))
			copy(res, s[:])
			return res
		} else if *shaflag == 512 {
			s := sha512.Sum512([]byte(*str))
			res := make([]byte, len(s))
			copy(res, s[:])
			return res
		} else {
			fmt.Println("参数错误，请输入256，384，512")
			os.Exit(0)
		}
		return nil
	}
	fmt.Printf("%T \n%[1]x \n", sha())
}
