简介
MD5是一种常见的哈希算法,用于将任意长度的数据转换成固定长度的数据,通常是128位。
哈希算法
了解MD5之前得了解哈希算法,哈希算法是将任意长度的消息压缩成固定长度的消息摘要(hash值)的一种算法。它可以将任意长度的数据(明文)通过哈希函数变成固定长度的摘要(密文)。哈希算法具有以下特点:
-
不可逆性:无法从消息摘要反推原始数据。
-
唯一性:如果输入数据不同,其摘要也不同。
-
确定性:同样的输入数据,其输出结果必定相同。
-
抗碰撞性:不同的输入数据难以产生相同的摘要。
哈希算法广泛应用于消息认证、数字签名、数据完整性验证等领域。常见的哈希算法有MD5、SHA-1、SHA-256等等,它们在安全性、速度、输出长度等方面有所不同,需要根据具体的应用场景来选择合适的哈希算法。哈希算法是将任意长度的消息压缩成固定长度的消息摘要(hash值)的一种算法。它可以将任意长度的数据(明文)通过哈希函数变成固定长度的摘要(密文)。哈希算法具有以下特点:
-
不可逆性:无法从消息摘要反推原始数据。
-
唯一性:如果输入数据不同,其摘要也不同。
-
确定性:同样的输入数据,其输出结果必定相同。
-
抗碰撞性:不同的输入数据难以产生相同的摘要。
哈希算法广泛应用于消息认证、数字签名、数据完整性验证等领域。常见的哈希算法有MD5、SHA-1、SHA-256等等,它们在安全性、速度、输出长度等方面有所不同,需要根据具体的应用场景来选择合适的哈希算法。
MD5转码
New一个md5对象
在Go语言中,md5包中提供了New()函数来创建一个MD5哈希对象。下面是New()函数的详细解释。
- 函数原型
func New() hash.Hash
- 函数功能
New()函数用于创建一个新的MD5哈希对象。
- 函数返回值
New()函数返回一个实现了hash.Hash接口的MD5哈希对象。
- 示例代码
下面的示例代码展示了如何使用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)
}
- 执行结果
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格式