分类 Go 下的文章

“Go是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫、罗勃·派克及肯·汤普逊于2007年9月开始设计Go,稍后伊恩·兰斯·泰勒、拉斯·考克斯加入项目。Go是基于Inferno操作系统所开发的。”

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/sha512"
    "fmt"
    "io"
)

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

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

输出:

go run .
go crypto sha512_256 demo.
sha512_256 = 37d0b0e1e9bc941d6e21cf3dc04bf258df77f1de2f296390d845ccb20e06ef23
echo -n "https://const.net.cn/" | openssl dgst -sha512-256
(stdin)= 37d0b0e1e9bc941d6e21cf3dc04bf258df77f1de2f296390d845ccb20e06ef23

md5sha1计算方法,就是简单的将数据的md5结果与sha1结果拼接起来。

package main

import (
    "crypto/md5"
    "crypto/sha1"

    "fmt"
    "io"
)

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

    w1 := sha1.New()
    io.WriteString(w1, str1)
    io.WriteString(w1, str2)

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

输出:

go run .
go crypto md5sha1 demo.
md5sha1 = 4b655b565c09136dd867a7e523371391405036731104eeb5fae59f5f600f8b4771d93ac5
echo -n "https://const.net.cn/" | openssl dgst -md5-sha1
(stdin)= 4b655b565c09136dd867a7e523371391405036731104eeb5fae59f5f600f8b4771d93ac5

RIPEMD-160是以原始版RIPEMD所改进的160位元版本,而且是RIPEMD系列中最常见的版本。 RIPEMD-160是設計給学术社群所使用的,剛好相对于国家安全局所设计SHA-1 和SHA-2 算法。

package main

import (
    "fmt"
    "io"

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

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

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

输出:

go run .
go crypto ripemd160 demo.
ripemd160 = 9e5801b91909e1c129f7b2429c968bb932f6f3e1
echo -n "https://const.net.cn/" | openssl dgst -ripemd160
(stdin)= 9e5801b91909e1c129f7b2429c968bb932f6f3e1

SHA-3第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak算法,设计者宣称在 Intel Core 2 的CPU上面,此算法的性能是12.6比特每时钟周期(cycles per byte)。
SHA-3 在2015年8月5日由 NIST 通过 FIPS 202 正式发表。

package main

import (
    "fmt"
    "io"

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

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

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

go run .
go crypto sha3_224 demo.
sha3_224 = e328606cc1eb2999a2d3f959883c78d6fe4d24d0701eda4d052393ec
echo -n "https://const.net.cn/" | openssl dgst -sha3-224
(stdin)= e328606cc1eb2999a2d3f959883c78d6fe4d24d0701eda4d052393ec

SHA-3第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak算法,设计者宣称在 Intel Core 2 的CPU上面,此算法的性能是12.6比特每时钟周期(cycles per byte)。
SHA-3 在2015年8月5日由 NIST 通过 FIPS 202 正式发表。
代码:

package main

import (
    "fmt"
    "io"

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

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

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

输出:

go run .
go crypto sha3_256 demo.
sha3_256 = 8381f50d5d006a28ef44a4e3e8eefc4a8b3c8374f4796a44d5592c0caf48c55f
echo -n "https://const.net.cn/" | openssl dgst -sha3-256
(stdin)= 8381f50d5d006a28ef44a4e3e8eefc4a8b3c8374f4796a44d5592c0caf48c55f