go常用demo小结 /* *args.go 使用os.Args命令行参数输入 另一种flag随后补充 */ package main import ( "fmt" "os" "reflect" "strconv" ) var Usage = func() { fmt.Println("USAGE: calc command [arguments] ...") fmt.Println("\nThe commands are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare root of a non-negative value.") } func main() { args := os.Args if args == nil || len(args) < 2 { Usage() return } fmt.Println("args[0] = ", args[0]) fmt.Println("args[1] = ", args[1]) args2, _ := strconv.Atoi(args[2]) fmt.Println("args2 = ", args2, reflect.TypeOf(args2)) if args[1] == "out" { a := 5 fmt.Println("a", a) } //fmt.Println("a", a) //a :作用域只是在if中 } /* *byte_to_int.go 整形转换成字节 字节转换成整形 */ package main import ( "bytes" "encoding/binary" "fmt" "reflect" ) //整形转换成字节 func IntToBytes(n int) []byte { tmp := int32(n) bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, &tmp) return bytesBuffer.Bytes() } //字节转换成整形 func BytesToInt(b []byte) int { bytesBuffer := bytes.NewBuffer(b) var tmp int32 binary.Read(bytesBuffer, binary.BigEndian, &tmp) return int(tmp) } func main() { a := 128 b := IntToBytes(a) fmt.Println("b = ", b, len(b), reflect.TypeOf(b)) var c = []byte{0x00, 0x00, 0x00, 0x08} d := BytesToInt(c) fmt.Println("d = ", d, reflect.TypeOf(d)) fmt.Println(c, string(c)) } /* *BytesCombine.go 多个[]byte数组合并成一个[]byte */ package main import ( "bytes" "fmt" "reflect" ) //BytesCombine 多个[]byte数组合并成一个[]byte func BytesCombine(pBytes ...[]byte) []byte { len := len(pBytes) s := make([][]byte, len) for index := 0; index < len; index++ { s[index] = pBytes[index] } sep := []byte("") return bytes.Join(s, sep) } //BytesCombine 多个[]byte数组合并成一个[]byte func PlusBytesCombine(pBytes ...[]byte) []byte { return bytes.Join(pBytes, []byte("")) } func main() { var a = []byte{1, 2, 3, 4} var b = []byte{1, 2, 3, 4} var c = []byte{1, 2, 3, 4} fmt.Println(a, b, c) d := BytesCombine(a, b, c) fmt.Println(d) e := PlusBytesCombine(a, b, c) fmt.Println("e =", e, reflect.TypeOf(e)) } /* *zlib.go 压缩 解压[]byte */ package main import ( "bytes" "compress/zlib" "fmt" "io/ioutil" ) //压缩byte func ZipBytes(input []byte) []byte { var buf bytes.Buffer compressor, err := zlib.NewWriterLevel(&buf, zlib.BestSpeed) if err != nil { return input } compressor.Write(input) compressor.Close() return buf.Bytes() } //解压byte func UnzipBytes(input []byte) []byte { b := bytes.NewReader(input) r, err := zlib.NewReader(b) defer r.Close() if err != nil { panic(err) } data, _ := ioutil.ReadAll(r) return data } func main() { var input = []byte("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKsAAAAgCAYAAABtn4gCAAAI9klEQVR4Xu2cfYxcVRmHn3Pu3Nm6lXa2ta0AYlsgFSGgThMU0W5hGkqApNGARk3cGm3BRN3FYGuCISrBXaNphcSkG2I3hn9gY2gSNWq32AoE1C6KRihFti2QSgvsTmm783HvOa+zM69cSS8Tacsq7n2SX87cj5P7ZvLs2ztnbseICG8HMjIsbxMyMnIoxhja8fJnriuYMNdjOsIVNhd0Y0wBRbxH6nHZ16OdUot2iXNDC3/2mzJtOImOnpHJ2p4Xr13ZkDTYJLHrwRgw4L1gAptIFzt87AoSuzXi/BqJ3KZ/XL1iSGLXd9aOh8u81WRksh5cefmUeFuBgmBABHEeEziwBrUVvCCxayWaSow419MY17zw4eVrz3ls9zbeKjIyWV+4bPkmiVyvCtnqps6Bta2uahJZxQs4jziHxP7fxS1I7B947tJLN5/7xBN9tIeN37yNN0EXME6LecAEGfR/746ZJeuBSy9RUVsiGucxsYPAYuxUzOtlFQEniG8JS+xRaTW+d/+y97P46Sf7yMg4") zipInput := ZipBytes(input) fmt.Println("input =", len(input)) fmt.Println("zipIput =", len(zipInput)) UnZipOut := UnzipBytes(zipInput) fmt.Println("UnZipOut =", UnZipOut, "\n", len(UnZipOut)) } /* *base64.go base64编码 解码 */ package main import ( "encoding/base64" "fmt" "reflect" ) func main() { input := []byte("hello golang base64 快乐编程http://www.01happy.com +~") // 演示base64编码 输入类型:[]byte类型 输出类型:string类型 encodeString := base64.StdEncoding.EncodeToString(input) fmt.Println(encodeString, reflect.TypeOf(encodeString)) // 对上面的编码结果进行base64解码 输入类型:string类型 输出类型:[]byte类型 decodeBytes, err := base64.StdEncoding.DecodeString(encodeString) if err != nil { panic(err) } fmt.Println(string(decodeBytes), reflect.TypeOf(decodeBytes)) } /* *gen_rsakey.go 产生rsa公私钥 */ package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/pem" "flag" "log" "os" ) func main() { var bits int flag.IntVar(&bits, "b", 1024, "密钥长度,默认为1024位") if err := GenRsaKey(bits); err != nil { log.Fatal("密钥文件生成失败!") } log.Println("密钥文件生成成功!") } func GenRsaKey(bits int) error { // 生成私钥文件 privateKey, err := rsa.GenerateKey(rand.Reader, bits) if err != nil { return err } derStream := x509.MarshalPKCS1PrivateKey(privateKey) block := &pem.Block{ Type: "私钥", Bytes: derStream, } file, err := os.Create("vgate_private.pem") if err != nil { return err } err = pem.Encode(file, block) if err != nil { return err } // 生成公钥文件 publicKey := &privateKey.PublicKey derPkix, err := x509.MarshalPKIXPublicKey(publicKey) if err != nil { return err } block = &pem.Block{ Type: "公钥", Bytes: derPkix, } file, err = os.Create("vgate_public.pem") if err != nil { return err } err = pem.Encode(file, block) if err != nil { return err } return nil } /* *rsa.go rsa示例 */ package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/hex" "encoding/pem" "errors" "fmt" "io/ioutil" "os" "reflect" ) var privateKey, publicKey []byte func init() { var err error publicKey, err = ioutil.ReadFile("public.pem") if err != nil { os.Exit(-1) } privateKey, err = ioutil.ReadFile("private.pem") if err != nil { os.Exit(-1) } } func main() { var data []byte var err error data, err = RsaEncrypt([]byte("hello world")) if err != nil { panic(err) } fmt.Println(string(data)) origData, err := RsaDecrypt(data) if err != nil { panic(err) } fmt.Println(string(origData)) src := "test sign" signData, err := RsaSign([]byte(src), crypto.MD5) if err != nil { panic(err) } sign := hex.EncodeToString(signData) fmt.Println("signData type:", reflect.TypeOf(signData)) fmt.Println("sign type:", reflect.TypeOf(sign)) fmt.Println(sign) fmt.Println(len(sign)) fmt.Println(len(signData)) signB, err := hex.DecodeString(sign) err = RsaVerify([]byte(src), signB, crypto.MD5) if err != nil { panic(err) } fmt.Println("verify success") } // Rsa加密 func RsaEncrypt(origData []byte) ([]byte, error) { block, _ := pem.Decode(publicKey) if block == nil { return nil, errors.New("public key error") } pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) if err != nil { return nil, err } pub := pubInterface.(*rsa.PublicKey) return rsa.EncryptPKCS1v15(rand.Reader, pub, origData) } // Rsa解密 func RsaDecrypt(ciphertext []byte) ([]byte, error) { block, _ := pem.Decode(privateKey) if block == nil { return nil, errors.New("private key error!") } priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return nil, err } return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext) } //Rsa签名 func RsaSign(src []byte, hash crypto.Hash) ([]byte, error) { block, _ := pem.Decode(privateKey) if block == nil { return nil, errors.New("private key error!") } priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) if err != nil { return nil, err } h := hash.New() h.Write(src) hashed := h.Sum(nil) return rsa.SignPKCS1v15(rand.Reader, priv, hash, hashed) } //Rsa验签 func RsaVerify(src []byte, sign []byte, hash crypto.Hash) error { block, _ := pem.Decode(publicKey) if block == nil { return nil } pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes) if err != nil { return nil } pub := pubInterface.(*rsa.PublicKey) h := hash.New() h.Write(src) hashed := h.Sum(nil) return rsa.VerifyPKCS1v15(pub, hash, hashed, sign) } /* *aes.go aes示例 */ package main import ( "crypto/aes" "crypto/cipher" "fmt" ) type AesEncrypt struct { } //加密字符串 输入类型:string 返回类型:[]byte func (this *AesEncrypt) Encrypt(key []byte, strMesg string) ([]byte, error) { var iv = []byte(key)[:aes.BlockSize] encrypted := make([]byte, len(strMesg)) aesBlockEncrypter, err := aes.NewCipher(key) if err != nil { return nil, err } aesEncrypter := cipher.NewCFBEncrypter(aesBlockEncrypter, iv) aesEncrypter.XORKeyStream(encrypted, []byte(strMesg)) return encrypted, nil } //解密字符串 输入类型:[]byte 返回类型:string func (this *AesEncrypt) Decrypt(key []byte, src []byte) (strDesc string, err error) { defer func() { //错误处理 if e := recover(); e != nil { err = e.(error) } }() var iv = []byte(key)[:aes.BlockSize] decrypted := make([]byte, len(src)) var aesBlockDecrypter cipher.Block aesBlockDecrypter, err = aes.NewCipher([]byte(key)) if err != nil { return "", err } aesDecrypter := cipher.NewCFBDecrypter(aesBlockDecrypter, iv) aesDecrypter.XORKeyStream(decrypted, src) return string(decrypted), nil } func main() { aesEnc := AesEncrypt{} key := "1234567890123456" arrEncrypt, err := aesEnc.Encrypt([]byte(key), "0123456789abcdef123") if err != nil { fmt.Println(arrEncrypt) return } fmt.Println(arrEncrypt) strMsg, err := aesEnc.Decrypt([]byte(key), arrEncrypt) if err != nil { fmt.Println(arrEncrypt) return } fmt.Println(strMsg) } /* *md5.go md5示例 */ package main import ( "crypto/md5" "encoding/hex" "fmt" ) type MD5Client struct { } var MD5 = MD5Client{} func (this *MD5Client) Encrypt(plantext []byte) []byte { result := md5.Sum(plantext) return result[:] } func main() { sum := MD5.Encrypt([]byte(`红薯鸭`)) fmt.Println("sum is:", sum) sumStr := hex.EncodeToString(sum) fmt.Println("sumStr is:", sumStr) }
go demo小结
猜你喜欢
转载自blog.csdn.net/qq_21794823/article/details/79028609
今日推荐
周排行