GO实现SHA256算法
sha1
sha2: (一系列哈希算法,更可靠,更安全)
– SHA-224
– SHA-256 ===> 比特币, 以太坊,都使用
– SHA-384
– SHA-512
SHA256算法使用的哈希值长度是256位。
package main import ( "crypto/sha256" "fmt" "io" "os" ) const filename = "D:\\www\\gostudy\\keystudy\\Ethereum-Wallet-macosx-0-9-3.dmg" //macOS 官方哈希 //Ethereum-Wallet-macosx-0-9-3.dmg //c90fb7aad36b3a8357cac9472776b0e92363b2b8c684b8ea36d160a68cbe829f func main() { //1、open文件 fp,err := os.Open(filename) if err != nil{ panic(err) } defer fp.Close() //2、创建hash器 hasher := sha256.New() //3、copy句柄,利用指针将fp内容拷贝到hasher中 //func Copy(dst Writer, src Reader) (written int64, err error) length,err := io.Copy(hasher,fp) if err != nil{ panic(err) } fmt.Printf("length:%d\n",length) //4、hash sum操作 hash := hasher.Sum(nil) fmt.Printf("hash is : %x \n",hash) }
输出
length:60969776 hash is : c90fb7aad36b3a8357cac9472776b0e92363b2b8c684b8ea36d160a68cbe829f
io.Copy() 方法
io.Copy() 方法实现了两个文件指针之间的内容拷贝。该方法的原型如下
func Copy(dst Writer, src Reader) (written int64, err error)
io.Copy() 方法将副本从 src 复制到 dst ,直到 src 达到文件末尾 ( EOF ) 或发生错误,然后返回复制的字节数和复制时遇到的第一个错误( 如果有 )
有了这个函数,我们就省去了先把内容读取到内存,然后将内存中的内容写到文件的过程,于是,我们的代码就可以改成如下方式
示例代码
package main import ( "io" "net/http" "os" ) func main() { imgUrl := "https://www.twle.cn/static/i/img1.jpg" // Get the data resp, err := http.Get(imgUrl) if err != nil { panic(err) } defer resp.Body.Close() // 创建一个文件用于保存 out, err := os.Create("img1.jpg") if err != nil { panic(err) } defer out.Close() // 然后将响应流和文件流对接起来 _, err = io.Copy(out, resp.Body) if err != nil { panic(err) } }