go语言 实现哈希算法

验证结果网址 http://www.fileformat.info/tool/hash.htm

"golang.org/x/crypto/md4"不存在时,解决方法:
cd $GOPATH/src
mkdir -p golang.org/x/
cd  golang.org/x/
git clone https://github.com/golang/crypto.git

实现md4加密算法
package main

import (
    "encoding/hex"
    "fmt"
    "hash"

    "golang.org/x/crypto/md4"
)

func main() {
    res := MD4("123456")
    fmt.Println(res)
}

// MD4 MD4
func MD4(text string) string {
    var hashInstance hash.Hash
    hashInstance = md4.New()
    arr, _ := hex.DecodeString(text)
    hashInstance.Write(arr)
    bytes := hashInstance.Sum(nil)
    return fmt.Sprintf("%x", bytes)

}

实现封装哈希加密算法
package main

import (
    "crypto/md5"
    "crypto/sha1"
    "crypto/sha256"
    "crypto/sha512"
    "encoding/hex"
    "fmt"
    "hash"

    "golang.org/x/crypto/md4"
    "golang.org/x/crypto/ripemd160"
)

func main() {
    res := HASH("123456", "sha256", true)
    fmt.Println(res)
}

// HASH HASH
func HASH(text string, hashType string, isHex bool) string {
    var hashInstance hash.Hash
    switch hashType {
    case "md4":
        hashInstance = md4.New()
    case "md5":
        hashInstance = md5.New()
    case "sha1":
        hashInstance = sha1.New()
    case "sha256":
        hashInstance = sha256.New()
    case "sha512":
        hashInstance = sha512.New()
    case "ripemd160":
        hashInstance = ripemd160.New()
    }
    if isHex {
        arr, _ := hex.DecodeString(text)
        hashInstance.Write(arr)
    } else {
        hashInstance.Write([]byte(text))
    }

    bytes := hashInstance.Sum(nil)
    return fmt.Sprintf("%x", bytes)
}

// MD4 MD4
func MD4(text string, isHex bool) string {
    var hashInstance hash.Hash
    hashInstance = md4.New()
    if isHex {
        arr, _ := hex.DecodeString(text)
        fmt.Println(arr)
        hashInstance.Write(arr)
    } else {
        hashInstance.Write([]byte(text))
    }

    bytes := hashInstance.Sum(nil)
    return fmt.Sprintf("%x", bytes)
}

// MD5 MD5
func MD5(text string, isHex bool) string {
    var hashInstance hash.Hash
    hashInstance = md5.New()
    if isHex {
        arr, _ := hex.DecodeString(text)
        fmt.Println(arr)
        hashInstance.Write(arr)
    } else {
        hashInstance.Write([]byte(text))
    }

    bytes := hashInstance.Sum(nil)
    return fmt.Sprintf("%x", bytes)
}

实现双哈希算法
func sha256Double(text string, isHex bool) []byte {
    hashInstance := sha256.New()
    if isHex {
        arr, _ := hex.DecodeString(text)
        hashInstance.Write(arr)
    } else {
        hashInstance.Write([]byte(text))
    }
    bytes := hashInstance.Sum(nil)
    hashInstance.Reset()
    hashInstance.Write(bytes)
    bytes = hashInstance.Sum(nil)
    return bytes
}
func sha256DoubleString(text string, isHex bool) string {
    bytes := sha256Double(text, isHex)
    return fmt.Sprintf("%x", bytes)
}

  

原文地址:https://www.cnblogs.com/Mishell/p/12235404.html

时间: 2024-11-03 03:54:44

go语言 实现哈希算法的相关文章

R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)

上一篇(R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理))讲解了LSH的基本原理,笔者在想这么牛气冲天的方法在R语言中能不能实现得了呢? 于是在网上搜索了一下,真的发现了一个叫textreuse的包可以实现这样的功能,而且该包较为完整,可以很好地满足要求. 现在的版本是 0.1.3,最近的更新的时间为 2016-03-28. 国内貌似比较少的用这个包来实现这个功能,毕竟R语言在运行大规模数据的性能比较差,而LSH又是处理大规模数据的办法,所以可能国内比较少的用R来执

一致性哈希算法及其在分布式系统中的应用(转)

原文:http://blog.codinglabs.org/articles/consistent-hashing.html 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越

一致性哈希算法及其在分布式系统中的应用 作者 张洋

转 http://blog.codinglabs.org/articles/consistent-hashing.html 摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越

一致性哈希算法及其在分布式系统中的应用

摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制.现在我们一共有三台机器可以作为Me

扩展封装暴雪哈希算法(blizard hash algorithm),并与STL map进行操作性能上的比较

问题描述: 1.blizard hash algorithm 是众所周知的算法,关于它极小的碰撞概率和实现的简洁性一直为热爱技术的朋友津津乐道: 2.blizard hash algorithm 有个致命的问题就是它的实现受制于一个固定的(预先开辟的buffer)的限制,暴雪给出的是1024,也即当hash table 的填充的元素(key value pair)查过1024时,就没办法再往里面进行key value 对填充,这极大的限制了它的使用.在实现的应用,我们经常会向hash table

Java进阶(五十七)-基于感知哈希算法的图像配准

Java进阶(五十七)-基于感知哈希算法的pHash图像配准算法 ??毕业论文提交之后,老师交给自己一项任务:图像配准,也就是给你两幅图像,通过系统来判定两幅图像是否为同一副图像.自己作为这一方面的小白,先去网上搜索一下相应的检测方法,当然有现成的API调用最好,花钱也无所谓. ??我们这里采用的基础关键技术叫做 "感知哈希算法"(Perceptual hash algorithm),它的作用是对每张图片生成一个"指纹"(fingerprint)字符串,然后比较不同

_00013 一致性哈希算法 Consistent Hashing 探讨以及相应的新问题出现解决

一.业务场景 假如我们现在有12台Redis服务器(其它的什么东西也行),有很多User(用户)的数据数据从前端过来,然后往12台redis服务器上存储,在存储中就会出现一个问题,12台服务器,有可能其中几台Redis服务器上(简称集群A)存了很多的数据,然后另外几台Redis服务器(简称集群B)上存的数据很少,这样的话那 A 上的读写压力就会很大(当然,这个要看你的数据量的大小了,如果你数据量很小的话,基本无压力了,但是数据量很大,那就 ...),对于这样的问题,我们通常的解决办法是什么呢 ?

_00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决

笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:能够转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作. qq交流群:214293307  idkey=bf80524ac3630cb09

一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据

一致性哈希算法 摘自:http://blog.codinglabs.org/articles/consistent-hashing.html 算法简述 一致性哈希算法(Consistent Hashing)最早在论文<Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web>中被提出.简单来说,一致性哈希将整个哈希值空间组织成一