分类 Demo 下的文章

“各种示例”

crypto包搜集了常用的密码(算法)常量。
使用不同的hash 算法导入不同的包

const (
    MD4         Hash = 1 + iota // import golang.org/x/crypto/md4
    MD5                         // import crypto/md5
    SHA1                        // import crypto/sha1
    SHA224                      // import crypto/sha256
    SHA256                      // import crypto/sha256
    SHA384                      // import crypto/sha512
    SHA512                      // import crypto/sha512
    MD5SHA1                     // no implementation; MD5+SHA1 used for TLS RSA
    RIPEMD160                   // import golang.org/x/crypto/ripemd160
    SHA3_224                    // import golang.org/x/crypto/sha3
    SHA3_256                    // import golang.org/x/crypto/sha3
    SHA3_384                    // import golang.org/x/crypto/sha3
    SHA3_512                    // import golang.org/x/crypto/sha3
    SHA512_224                  // import crypto/sha512
    SHA512_256                  // import crypto/sha512
    BLAKE2s_256                 // import golang.org/x/crypto/blake2s
    BLAKE2b_256                 // import golang.org/x/crypto/blake2b
    BLAKE2b_384                 // import golang.org/x/crypto/blake2b
    BLAKE2b_512                 // import golang.org/x/crypto/blake2b

)

crypto实现md5的示例

package main

import (
    "crypto/md5"
    "fmt"
    "io"
)

func main() {
    fmt.Println("go-crypto/md5 demo.")
    str := "https://const.net.cn"

    data := []byte(str)
    has := md5.Sum(data)
    md5str1 := fmt.Sprintf("%x", has)
    fmt.Println(md5str1)

    str1 := "https://"
    str2 := "const.net.cn"
    w := md5.New()
    io.WriteString(w, str1)
    io.WriteString(w, str2)
    md5str2 := fmt.Sprintf("%x", w.Sum(nil))

    fmt.Println(md5str2)
}

输出:

go run .
go-crypto/md5 demo.
682d2c63236af6e721794b2988fc1d44
682d2c63236af6e721794b2988fc1d44
echo -n "https://const.net.cn" | md5sum 
682d2c63236af6e721794b2988fc1d44  -
echo -n "https://const.net.cn" | openssl dgst -md5
(stdin)= 682d2c63236af6e721794b2988fc1d44

MD4是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位。这个算法影响了后来的算法如MD5、SHA家族和RIPEMD等。
1991年Den Boer和Bosselaers发表了一篇文章指出MD4的短处, 2004年8月王小云报告在计算MD4时可能发生杂凑冲撞。
Go 会提示 md4 不建议使用,不安全。

package main

import (
    "crypto/md5"
    "fmt"
    "io"

    "golang.org/x/crypto/md4"
)

func main() {
    fmt.Println("go md4 demo.")

    str1 := "https://"
    str2 := "const.net.cn"
    w1 := md4.New()
    io.WriteString(w1, str1)
    io.WriteString(w1, str2)

    md4str2 := fmt.Sprintf("%x", w1.Sum(nil))
    fmt.Println(md4str2)

}

输出:

go run .
go md4 demo.
d6dd1d2a616b6a480c6ce417b517734b
echo -n "https://const.net.cn" | openssl dgst -md4
(stdin)= d6dd1d2a616b6a480c6ce417b517734b

SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦资料处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

package main

import (
    "crypto/sha1"
    "fmt"
    "io"
)

func main() {
    fmt.Println("go crypto sha1 demo.")
    str1 := "https://const.net.cn"
    str2 := "/"
    w := sha1.New()
    io.WriteString(w, str1)
    io.WriteString(w, str2)

    sha1str := fmt.Sprintf("%x", w.Sum(nil))
    fmt.Println(sha1str)
}

输出:

go run .
go crypto sha1 demo.
405036731104eeb5fae59f5f600f8b4771d93ac5
echo -n "https://const.net.cn/" | openssl dgst -sha1
(stdin)= 405036731104eeb5fae59f5f600f8b4771d93ac5

SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

package main

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

func main() {
    fmt.Println("go crypto sha224 demo.")
    str1 := "https://const.net.cn"
    str2 := "/"
    w := sha256.New224()
    io.WriteString(w, str1)
    io.WriteString(w, str2)

    sha1str := fmt.Sprintf("sha224 = %x", w.Sum(nil))
    fmt.Println(sha1str)
}

输出:

go run .
go crypto sha224 demo.
sha224 = 3ab49cfc67deb77e59156090de73673847e87e7b68723202f0394699
echo -n "https://const.net.cn/" | openssl dgst -sha224
(stdin)= 3ab49cfc67deb77e59156090de73673847e87e7b68723202f0394699

SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,由美国国家标准与技术研究院(NIST)在2001年发布。属于SHA算法之一,是SHA-1的后继者。其下又可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

package main

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

func main() {
    fmt.Println("go crypto sha256 demo.")
    str1 := "https://const.net.cn"
    str2 := "/"
    w := sha256.New()
    io.WriteString(w, str1)
    io.WriteString(w, str2)

    hashstr := fmt.Sprintf("sha256 = %x", w.Sum(nil))
    fmt.Println(hashstr)
}

输出:

go run .
go crypto sha256 demo.
sha256 = 2249a0aa015fa72b155b297b331bc0e7e34052096c43297d9a2de3a2df38bded
echo -n "https://const.net.cn/" | openssl dgst -sha256
(stdin)= 2249a0aa015fa72b155b297b331bc0e7e34052096c43297d9a2de3a2df38bded