分类 Go 下的文章

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

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_384 demo.")
str1 := "https://const.net.cn"
str2 := "/"
w := sha3.New384()
io.WriteString(w, str1)
io.WriteString(w, str2)

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

}

输出:
go run .
go crypto sha3_384 demo.
sha3_384 = 3e67e0647f667d67d5e15b4bb7088cd8f6464ba343e90e0ae09541700de98b90c92a55ec6c013f99dea1ea30a47dd6d3
echo -n "https://const.net.cn/" | openssl dgst -sha3-384
(stdin)= 3e67e0647f667d67d5e15b4bb7088cd8f6464ba343e90e0ae09541700de98b90c92a55ec6c013f99dea1ea30a47dd6d3

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_512 demo.")
    str1 := "https://const.net.cn"
    str2 := "/"
    w := sha3.New512()
    io.WriteString(w, str1)
    io.WriteString(w, str2)

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

输出:

go run .
go crypto sha3_512 demo.
sha3_512 = 540bc484763d923575db2aec61fab3502524225f127270301d1cf7f572bf17cd252241322c9df8875df159e732f344cd2cb83991bfc1f3dfbe43c1887f366380
echo -n "https://const.net.cn/" | openssl dgst -sha3-512
(stdin)= 540bc484763d923575db2aec61fab3502524225f127270301d1cf7f572bf17cd252241322c9df8875df159e732f344cd2cb83991bfc1f3dfbe43c1887f366380

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_224 demo.")
    str1 := "https://const.net.cn"
    str2 := "/"
    w := sha512.New512_224()
    io.WriteString(w, str1)
    io.WriteString(w, str2)

    hashstr := fmt.Sprintf("sha512_224 = %x ,sha512_224 len = %d", w.Sum(nil), w.Size())
    fmt.Println(hashstr)
}

输出:

go run .
go crypto sha512_224 demo.
sha512_224 = ac8ef7fa5a2383df65cc9820b8e2ce548b540ca7756a2ba7d09218c9 ,sha512_224 len = 28
echo -n "https://const.net.cn/" | openssl dgst -sha512-224
(stdin)= ac8ef7fa5a2383df65cc9820b8e2ce548b540ca7756a2ba7d09218c9

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 ,sha512_256 len = %d", w.Sum(nil), w.Size())
    fmt.Println(hashstr)
}

输出:

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

BLAKE和BLAKE2是基于丹尼尔·J·伯恩斯坦ChaCha流密码的密码散列函数。与SHA-2一样,有两种不同字大小的变体。BLAKE-256和BLAKE-224使用32位字,分别产生256位和224位的摘要大小,而BLAKE-512和BLAKE-384分别使用64位字,产生512位和384位的摘要大小。在64位的x64和ARM体系结构上运行时,BLAKE2b比SHA-3,SHA-2,SHA-1和MD5更快。BLAKE2的安全性提供类似于SHA-3,优于SHA-2:免疫长度扩展攻击,来自随机预言机的无差异性等。BLAKE的改进版本BLAKE2于2012年12月21日宣布推出。BLAKE3于2020年1月9日宣布推出。

代码:

package main

import (
    "fmt"

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

func main() {
    fmt.Println("go crypto blake2s_256 demo.")
    str1 := "https://const.net.cn/"
    w := blake2s.Sum256([]byte(str1))

    hashstr := fmt.Sprintf("blake2s_256 = %x ,blake2s_256 len = %d", w, len(w))
    fmt.Println(hashstr)
}

输出:

go run .
go crypto blake2s_256 demo.
blake2s_256 = 5d91ecdf175b8f81bf3cd76c96f7fa1174d4cba8f4bcfa17d183bf4b20f7cdca ,blake2s_256 len = 32
echo -n "https://const.net.cn/" | openssl dgst -blake2s256
(stdin)= 5d91ecdf175b8f81bf3cd76c96f7fa1174d4cba8f4bcfa17d183bf4b20f7cdca