const 发布的文章

“const”

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

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/blake2b"
)

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

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

输出:

go run .
go crypto blake2b_256 demo.
blake2b_256 = 3dacddea2bb47f46eaf6bfe98ed979633cc9bc0a5ca5c451a13640ce886254a6 ,blake2b_256 len = 32