md5算法go语言实现
时间: 2023-07-07 08:10:50 浏览: 157
以下是Go语言实现MD5算法的示例代码:
```go
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
)
func main() {
data := []byte("Hello, world!")
hash := md5.Sum(data)
md5str := hex.EncodeToString(hash[:])
fmt.Println(md5str)
}
```
这个程序将输出 "86fb269d190d2c85f6e0468ceca42a20",这就是 "Hello, world!" 字符串的MD5哈希值。在这个程序中,我们使用了Go语言标准库中的crypto/md5包,它提供了MD5哈希算法的实现。我们首先将要计算哈希值的数据转换成字节数组,然后调用md5.Sum函数计算哈希值。由于md5.Sum函数返回的是一个长度为16的字节数组,我们还需要使用encoding/hex包将其转换成16进制字符串,最后输出结果即可。
相关问题
go语言 pbe加密算法实现
以下是使用Go语言实现PBE加密算法的示例代码:
```go
package main
import (
"crypto/cipher"
"crypto/des"
"crypto/md5"
"encoding/base64"
"fmt"
)
func main() {
// 设置加密参数
password := "123456" // 密码
salt := "salt" // 盐值
iterations := 1000 // 迭代次数
// 生成密钥
key := pbkdf1([]byte(password), []byte(salt), iterations, 8)
// 加密明文
plaintext := "hello world"
ciphertext, err := pbeEncrypt([]byte(plaintext), key)
if err != nil {
panic(err)
}
// 输出加密结果
fmt.Println(base64.StdEncoding.EncodeToString(ciphertext))
// 解密密文
decrypted, err := pbeDecrypt(ciphertext, key)
if err != nil {
panic(err)
}
// 输出解密结果
fmt.Println(string(decrypted))
}
// PBE加密
func pbeEncrypt(plaintext []byte, key []byte) ([]byte, error) {
// 创建加密器
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
iv := make([]byte, block.BlockSize())
stream := cipher.NewCTR(block, iv)
// 加密明文
ciphertext := make([]byte, len(plaintext))
stream.XORKeyStream(ciphertext, plaintext)
return ciphertext, nil
}
// PBE解密
func pbeDecrypt(ciphertext []byte, key []byte) ([]byte, error) {
// 创建解密器
block, err := des.NewCipher(key)
if err != nil {
return nil, err
}
iv := make([]byte, block.BlockSize())
stream := cipher.NewCTR(block, iv)
// 解密密文
plaintext := make([]byte, len(ciphertext))
stream.XORKeyStream(plaintext, ciphertext)
return plaintext, nil
}
// PBKDF1算法
func pbkdf1(password []byte, salt []byte, iterations int, keyLen int) []byte {
key := password
for i := 0; i < iterations; i++ {
data := append(key, salt...)
hash := md5.Sum(data)
key = hash[:]
}
return key[:keyLen]
}
```
go 实现 MD5 decode
Go语言中可以使用crypto/md5包来实现MD5解密。
示例代码:
```go
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
)
func main() {
hash := "5d41402abc4b2a76b9719d911017c592" // 待解密的MD5值
password := decodeMd5(hash)
fmt.Println(password) // 输出解密后的密码
}
// decodeMd5 解密MD5值
func decodeMd5(hash string) string {
data := []byte(hash)
decodeData, err := hex.DecodeString(string(data))
if err != nil {
return ""
}
return string(decodeData)
}
```
解析:
1. 导入crypto/md5包和encoding/hex包;
2. 定义待解密的MD5值hash;
3. 在main函数中调用decodeMd5函数,将hash作为参数传递给decodeMd5函数;
4. 在decodeMd5函数中,使用hex.DecodeString将MD5值转换为字节数组;
5. 将字节数组转换为字符串并返回。
注意:MD5算法是不可逆的,无法完全解密出原始字符串,只能通过破解的方式得到相同的哈希值。以上代码中的decodeMd5实际上只是将MD5值进行了反编码,返回的是十六进制字符串。
阅读全文