const 发布的文章

“const”

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

下载 高速公路年度发展报告2021
001.jpg

curl 'https://book.yunzhan365.com/wkmya/muml/files/mobile/[1-124].jpg'   -H 'authority: book.yunzhan365.com'   -H 'sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"'   -H 'sec-ch-ua-mobile: ?0'   -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'   -H 'accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8'   -H 'sec-fetch-site: same-origin'   -H 'sec-fetch-mode: no-cors'   -H 'sec-fetch-dest: image'   -H 'referer: https://book.yunzhan365.com/wkmya/muml/mobile/index.html'   -H 'accept-language: zh-CN,zh;q=0.9'   -H 'cookie: sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2217a0e582ca111ac-06e58c91b95692-3c710e58-1430715-17a0e582ca2110a%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%2217a0e582ca111ac-06e58c91b95692-3c710e58-1430715-17a0e582ca2110a%22%7D; Hm_lvt_7fafaf8b8dc670c2109d0bbddc8be7e0=1623738298; Qs_lvt_323391=1623738298; Qs_pv_323391=309891294092990200%2C1997975047369361700%2C477389241827979800%2C3537689015888066000%2C4525915336882614300'   --compressed -O

curl使用保留符号[]和{}进行通配,它们一般不是合法URL的组成部分(IPv6地址除外),同时可以使用-g或--globoff禁用它。

可以使用[N-M]语法来指定一个数值范围,N为起始,M为结束(包括M):

curl -O http://example.com/[1-100].png

可以使用0作为前缀,如三位数的数字:

curl -O http://example.com/[001-100].png

如果只想请求数字为偶数的图像,可以使用步进(step counter):

curl -O http://example.com/[0-100:2].png

同时也可以处理字母范围:

curl -O http://example.com/section[a-z].html

如果需要采用列表,则需要将其放在花括号中,而不是中括号中:

curl -O http://example.com/{one,two,three,alpha,beta}.html

同时可以混用不同的组合:

curl -O http://example.com/{Ben, Alice, Frank}-{100*100, 1000*1000}.jpg
curl -O http://example.com/chess-[0-7]x[0-7].jpg

如果正在下载多个文件,并希望将它们保存在不同的子目录中,或者以不同的名称保存文件。curl可以采用输出文件名变量。URL中的每个通配都对应一个单独的变量,可以通过'#[num]'来引用,即在‘#’后面跟上与通配符对应的数字,从1(对应第一个通配)开始,到最后一个结束,如:

curl http://{one, two}.example.com -o "file_#1.txt"
curl http://{site, host}.host[1-5].example.com -o "subdir/#1_#2"

linux 合并所有图片到pdf文件

sudo apt install imagemagick

修改/etc/ImageMagick-6/policy.xml文件中
<policy domain="coder" rights="none" pattern="PDF" />

<policy domain="coder" rights="read | write" pattern="PDF" />

convert *.jpg -auto-orient pictures.pdf

convert `ls -1v *.jpg` file.pdf

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