[go]gin框架中MD5工具与密码加密

简介

MD5是一种常见的哈希算法,用于将任意长度的数据转换成固定长度的数据,通常是128位。

哈希算法

了解MD5之前得了解哈希算法,哈希算法是将任意长度的消息压缩成固定长度的消息摘要(hash值)的一种算法。它可以将任意长度的数据(明文)通过哈希函数变成固定长度的摘要(密文)。哈希算法具有以下特点:

  1. 不可逆性:无法从消息摘要反推原始数据。

  2. 唯一性:如果输入数据不同,其摘要也不同。

  3. 确定性:同样的输入数据,其输出结果必定相同。

  4. 抗碰撞性:不同的输入数据难以产生相同的摘要。

哈希算法广泛应用于消息认证、数字签名、数据完整性验证等领域。常见的哈希算法有MD5、SHA-1、SHA-256等等,它们在安全性、速度、输出长度等方面有所不同,需要根据具体的应用场景来选择合适的哈希算法。哈希算法是将任意长度的消息压缩成固定长度的消息摘要(hash值)的一种算法。它可以将任意长度的数据(明文)通过哈希函数变成固定长度的摘要(密文)。哈希算法具有以下特点:

  1. 不可逆性:无法从消息摘要反推原始数据。

  2. 唯一性:如果输入数据不同,其摘要也不同。

  3. 确定性:同样的输入数据,其输出结果必定相同。

  4. 抗碰撞性:不同的输入数据难以产生相同的摘要。

哈希算法广泛应用于消息认证、数字签名、数据完整性验证等领域。常见的哈希算法有MD5、SHA-1、SHA-256等等,它们在安全性、速度、输出长度等方面有所不同,需要根据具体的应用场景来选择合适的哈希算法。

MD5转码

New一个md5对象

在Go语言中,md5包中提供了New()函数来创建一个MD5哈希对象。下面是New()函数的详细解释。

  1. 函数原型
func New() hash.Hash
  1. 函数功能

New()函数用于创建一个新的MD5哈希对象。

  1. 函数返回值

New()函数返回一个实现了hash.Hash接口的MD5哈希对象。

  1. 示例代码

下面的示例代码展示了如何使用New()函数创建一个MD5哈希对象并对字符串进行哈希处理。

package main

import (
	"crypto/md5"
	"fmt"
)

func main() {
	// 创建一个MD5哈希对象
	h := md5.New()
	// 计算字符串的MD5哈希值
	h.Write([]byte("hello"))
	sum := h.Sum(nil)
	// 输出哈希值的16进制表示
	fmt.Printf("%x", sum)
}
  1. 执行结果
5d41402abc4b2a76b9719d911017c592

上述代码中,我们使用New()函数创建了一个MD5哈希对象,然后使用Write()方法对字符串进行哈希处理,最后使用Sum()方法获取哈希值的16进制表示。

使用Write函数把参数写进MD5对象中

MD5中的Write函数用于将数据流写入哈希计算器中。具体来说,Write函数接受一个字节数组作为输入参数,将这个字节数组中的数据写入MD5计算器中,计算器会自动对这些数据进行哈希计算。Write函数常用于处理大型数据,可以将数据分块处理,逐步将数据流写入哈希计算器中,从而避免一次性处理过多数据导致内存溢出或性能下降的问题。

下面是一个示例代码,演示了如何使用MD5中的Write函数将数据流写入哈希计算器中:

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("hello world")
    md5Hash := md5.New()
    md5Hash.Write(data)
    hashSum := md5Hash.Sum(nil)
    fmt.Printf("%x", hashSum)
}

在上面的代码中,我们首先定义了一个字节数组data,然后创建了一个MD5哈希计算器md5Hash。接着,我们使用md5Hash的Write函数将data中的数据写入md5Hash中,接下来,我们调用md5Hash的Sum函数获取计算出的哈希值。最后,我们使用fmt.Printf函数将哈希值以16进制的形式输出。

计算出参数对应的MD5的哈希对象

MD5是一种消息摘要算法,用于将任意长度的消息(字符串、文本文件等)压缩成长度为128比特的哈希值。在计算哈希值时,MD5算法使用了一个称为“消息扩展”的过程,通过添加一个或多个位填充和长度信息来使消息的长度达到512比特,然后将消息分成若干个512比特的块,并对每一个块进行一系列的处理,最终生成一个128比特的哈希值。

sum函数是hashlib模块中计算哈希值的方法之一。下面是sum函数的详细说明:

hashSum := md5Hash.Sum(nil)

该函数接受一个bytes类型的参数data,返回一个128比特的哈希值。如果需要计算长文本的哈希值,可以将文本分成若干块,并对每一个块调用sum函数,然后将每个块的哈希值拼接起来,最终得到整个文本的哈希值。

例如,下面的代码演示了如何计算一个字符串的MD5哈希值:

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("hello world")
    md5Hash := md5.New()
    md5Hash.Write(data)
    hashSum := md5Hash.Sum(nil)
    fmt.Printf("%x", hashSum)
}

其中,encode方法用于将字符串转换成bytes类型,hexdigest方法用于将128比特的哈希值转换成一个32位的十六进制字符串。

最后将哈希值转为字符串返回

EncodeToString函数是MD5包中的一个函数,用于将MD5哈希值转换为字符串形式。具体参数和返回值如下:

func EncodeToString(hash []byte) string

参数:hash表示MD5哈希值。

返回值:将MD5哈希值转换为字符串后的结果。

使用示例:

package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
    str := "hello world"
    hash := md5.Sum([]byte(str))
    hashString := fmt.Sprintf("%x", hash)
    fmt.Println(hashString)
}

输出结果:

5eb63bbbe01eeed093cb22bb8f5acdc3

在上述示例中,通过md5.Sum函数计算了字符串"hello world"的MD5哈希值。然后,使用EncodeToString函数将哈希值转换为字符串形式并打印输出。需要注意的是,EncodeToString函数常用于将二进制数据转换为字符串,而在MD5计算中,哈希值本身就是二进制数据,因此将其转换为字符串并不会改变其原始内容。

简单的加密算法

MD5转大写

使用strings.ToUpper()包裹MD5函数.
strings.ToUpper函数是Go语言字符串处理函数之一,用于将给定字符串中的所有字符转换为大写。其函数签名如下:

func ToUpper(s string) string

其中,参数s表示要进行大小写转换的字符串。函数返回值为转换后的字符串。例如,执行以下代码:

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "hello, world!"
    result := strings.ToUpper(s)
    fmt.Println(result)
}

输出结果为:

HELLO, WORLD!

其中,原始字符串为"hello, world!“,经过strings.ToUpper函数处理后,转换为大写的字符串"HELLO, WORLD!”。需要注意的是,该函数并不会修改原始字符串,而是返回一个新的字符串。strings.ToUpper函数是Go语言字符串处理函数之一,用于将给定字符串中的所有字符转换为大写。其函数签名如下:

func ToUpper(s string) string

其中,参数s表示要进行大小写转换的字符串。函数返回值为转换后的字符串。例如,执行以下代码:

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "hello, world!"
    result := strings.ToUpper(s)
    fmt.Println(result)
}

输出结果为:

HELLO, WORLD!

其中,原始字符串为"hello, world!“,经过strings.ToUpper函数处理后,转换为大写的字符串"HELLO, WORLD!”。需要注意的是,该函数并不会修改原始字符串,而是返回一个新的字符串。strings.ToUpper函数是Go语言字符串处理函数之一,用于将给定字符串中的所有字符转换为大写。其函数签名如下:

func ToUpper(s string) string

其中,参数s表示要进行大小写转换的字符串。函数返回值为转换后的字符串。例如,执行以下代码:

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "hello, world!"
    result := strings.ToUpper(s)
    fmt.Println(result)
}

输出结果为:

HELLO, WORLD!

其中,原始字符串为"hello, world!“,经过strings.ToUpper函数处理后,转换为大写的字符串"HELLO, WORLD!”。需要注意的是,该函数并不会修改原始字符串,而是返回一个新的字符串。

加密

一种比较简易的加密存储方式是:
1、生成一个随机数并储存到数据库
2、把自己的密码和随机数相加转换成MD5格式
3、储存的时候存这种MD5格式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值