热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go从入门到精通系列视频之go编程语言密码学哈希算法(二)






 2.1 哈希算法的代码实现 


2.1.1 核心代码


下面列举一些基础工具函数,如例13-1所示。


例1-1 基础工具函数


1 package main


2 import (


3  "encoding/hex"


4  "fmt"


5 )


6 func main(){


7  arr := []byte{'1', '0', '0', '0','p', 'h', 'o' ,'n', 'e'}


8  fmt.Println(string(arr))


9  str :=BytesToHexString(arr)


10  fmt.Println(str)


11  str = ReverseHexString(str)


12  arr,_ = HexStringToBytes(str)


13  fmt.Printf("%x\n", arr)


14  ReverseBytes(arr)


15  fmt.Println(string(arr))


16 }


17 /**


18  * 将字节数组转成16进制字符串: []byte -> string


19  */


20 func BytesToHexString(arr []byte) string {


21    return hex.EncodeToString(arr)


22 }


23 /**


24  * 将16进制字符串转成字节数组: hex string ->  []byte


25  */


26 func HexStringToBytes(s string) ([]byte, error) {


27    arr, err := hex.DecodeString(s)


28    return arr, err


29 }


30 /**


31  * 16进制字符串大端和小端颠倒


32  */


33 func ReverseHexString(hexStr string) string {


34    arr, _ := hex.DecodeString(hexStr)


35    ReverseBytes(arr)


36    return hex.EncodeToString(arr)


37 }


38 /**


39  * 字节数组大端和小端颠倒


40  */


41 func ReverseBytes(data []byte) {


42    for i, j := 0, len(data)-1; i

43       data[i], data[j] = data[j], data[i]


44    }


45 }


运行结果如图所示。


 Go从入门到精通系列视频之go编程语言密码学哈希算法(二)


图1.1 运行结果


 


下面列举一些哈希函数的使用,如例13-2所示。


例1-2 哈希函数


1 package main


2 import (


3  "crypto/md5"


4  "crypto/sha1"


5  "crypto/sha256"


6  "crypto/sha512"


7  "encoding/hex"


8  "fmt"


9  "hash"


10 )


11 func main(){


12  str := "1000phone"


13  fmt.Println(str)


14  str1 := HASH(str, "md5", false)


15  fmt.Println(str1)


16  str2 := HASH(str, "sha1", false)


17  fmt.Println(str2)


18  str3 := HASH(str, "sha256", false)


19  fmt.Println(str3)


20  arr := SHA256Double(str, false)


21  fmt.Println(string(arr))


22  str4 := SHA256DoubleString(str, false)


23  fmt.Println(str4)


24 }


25 func HASH(text string, hashType string, isHex bool) string {


26  var hashInstance hash.Hash


27  switch hashType {


28  case "md5":


29  hashInstance = md5.New()


30  case "sha1":


31  hashInstance = sha1.New()


32  case "sha256":


33  hashInstance = sha256.New()


34  case "sha512":


35  hashInstance = sha512.New()


36  }


37  if isHex {


38  arr , _ := hex.DecodeString(text)


39  hashInstance.Write(arr)


40  } else {


41  hashInstance.Write([]byte(text))


42  }


43  cipherBytes := hashInstance.Sum(nil)


44  return fmt.Sprintf("%x" , cipherBytes)


45 }


46 


47 func SHA256Double(text string, isHex bool) []byte {


48  hashInstance := sha256.New()


49  if isHex {


50  arr , _ := hex.DecodeString(text)


51  hashInstance.Write(arr)


52  } else {


53  hashInstance.Write([]byte(text))


54  }


55  cipherBytes := hashInstance.Sum(nil)


56  hashInstance.Reset()


57  hashInstance.Write(cipherBytes)


58  cipherBytes = hashInstance.Sum(nil)


59  return cipherBytes


60 }


61 


62 


63 func SHA256DoubleString(text string, isHex bool) string {


64  hashInstance := sha256.New()


65  if isHex {


66  arr , _ := hex.DecodeString(text)


67  hashInstance.Write(arr)


68  } else {


69  hashInstance.Write([]byte(text))


70  }


71  cipherBytes := hashInstance.Sum(nil)


72  hashInstance.Reset()


73  hashInstance.Write(cipherBytes)


74  cipherBytes = hashInstance.Sum(nil)


75  return fmt.Sprintf("%x" , cipherBytes)


76 }


运行结果如图所示。


Go从入门到精通系列视频之go编程语言密码学哈希算法(二)


图1.2 运行结果


 




推荐阅读
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
author-avatar
土豆小妈姐_645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有