博客
关于我
[日常] Go语言圣经--复合数据类型,数组习题
阅读量:661 次
发布时间:2019-03-15

本文共 1683 字,大约阅读时间需要 5 分钟。

编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数)

是一个 Rays 制造的练习。要实现这一目标,我们需要理解如何比较两个哈希算法产生的哈希值的区异位。

函数设计与实现

要实现这一功能,我们首先需要设计一个函数,该函数将接收两个字符串输入,计算每个字符串的SHA256哈希值,然后比较这两个哈希值的区异位数量。

以下是实现步骤:

  • 导入所需包:我们需要使用标准库中的crypto/sha256包。
  • 定义函数签名:函数名为compareSha256,接收两个字符串参数str1str2
  • 计算哈希值
    • 使用sha256.Sum256([]byte(str1))计算str1的哈希值,存储在变量a
    • 使用sha256.Sum256([]byte(str2))计算str2的哈希值,存储在变量b
  • 初始化计数器:创建一个初始化为0的整数变量num,用于存储区异位数量。
  • 逐位比较
    • 遍历哈希值的每个字节。
    • 对于每个字节,将其转换为8位二进制位,并存储在变量m中。
    • 比较这8个二进制位在两个哈希值中的位置。如果有位数不同,则增加计数器num
  • 返回结果:返回区异位的总数`.
  • 具体实现代码

    以下是实现代码的具体实现:

    package mainimport (    "fmt"    "crypto/sha256"    "flag"    "strings")func compareSha256(str1 string, str2 string) int {    a := sha256.Sum256([]byte(str1))    b := sha256.Sum256([]byte(str2))    num := 0        for i := 0; i < len(a); i++ {        m := 1        for m <= 8; m++ {            if (a[i] > uint(m)) != (b[i] >> uint(m)) {                num++            }        }    }        return num}//命令行标志var hashMethod = flag.String("s", "sha256", "请输入哈希算法")//定义一个打印哈希值的函数func printHash(flag_str string) {    if flag_str == "SHA256" {        fmt.Printf("%x\n", sha256.Sum256([]byte("x')))    } else if flag_str == "SHA512" {        fmt.Printf("%x\n", sha512.Sum512([]byte("x")))    } else if flag_str == "SHA384" {        fmt.Printf("%x\n", sha512.Sum384([]byte("x")))    }}

    功能解释

    在上述代码中,我们首先导入了必要的包。然后定义了一个用于比较两个字符串的SHA256哈希值区异位数量的函数compareSha256

    在这个函数中:

  • 使用sha256.Sum256计算两个字符串的哈希值。
  • 初始化计数器num为0。
  • 遍历每个字节,将其转换为8位二进制位,逐位比较两个哈希值的相同性。
  • 如果某一位不同,则计数器num加一。
  • 返回区异位数量.
  • 然后,我们在main函数中定义了一个命令行标志hashMethod 用于指定哈希算法,默认值为sha256

    最后,我们定义了一个函数printHash 用于根据指定的哈希算法打印对应的哈希值。

    这个函数就可以满足问题中练习1的需求。

    在其他练习中,这个思路可以相应扩展,结合其他哈希算法如SHA512SHA384等进行实现。

    此外,用户也可以根据需要自定义其他哈希算法。

    转载地址:http://vvnmz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现NQueen皇后问题算法(附完整源码)
    查看>>
    Objective-C实现number of digits解字符数算法(附完整源码)
    查看>>
    Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
    查看>>
    Objective-C实现numerical integration数值积分算法(附完整源码)
    查看>>
    Objective-C实现n个取m个数的组合算法(附完整源码)
    查看>>
    Objective-C实现N数理论(质素相关)算法(附完整源码)
    查看>>
    Objective-C实现n皇后问题算法(附完整源码)
    查看>>
    Objective-C实现O(E + V) 中找到 0-1-graph 中的最短路径算法(附完整源码)
    查看>>
    Objective-C实现OCR文字识别(附完整源码)
    查看>>
    Objective-C实现odd even sort奇偶排序算法(附完整源码)
    查看>>
    Objective-C实现ohms law欧姆定律算法(附完整源码)
    查看>>
    Objective-C实现P-Series algorithm算法(附完整源码)
    查看>>
    Objective-C实现page rank算法(附完整源码)
    查看>>
    Objective-C实现PageRank算法(附完整源码)
    查看>>
    Objective-C实现pancake sort煎饼排序算法(附完整源码)
    查看>>
    Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
    查看>>
    Objective-C实现PascalTriangle帕斯卡三角算法 (附完整源码)
    查看>>
    Objective-C实现password generator复杂密码生成器算法(附完整源码)
    查看>>
    Objective-C实现patience sort耐心排序算法(附完整源码)
    查看>>