千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:成都千锋IT培训  >  技术干货  >  Golang中的加密与解密实践

Golang中的加密与解密实践

来源:千锋教育
发布人:xqq
时间: 2023-12-27 21:27:18

Golang中的加密与解密实践

随着互联网的不断发展,越来越多的信息需要传输,而这些信息中很多都是敏感信息,为了保证信息安全,加密技术就被广泛应用。在Golang中,我们可以通过各种加密算法来保证信息安全,同时也可以通过相应的解密算法来还原加密后的信息。本文将介绍一些常见的加密与解密算法,并提供相应的代码示例。

一、MD5加密算法

MD5是一种哈希算法,它将任意长度的二进制值映射为一个128位的小写字母和数字组成的字符串。MD5算法具有抗碰撞特性,即不同的输入得到的哈希值很难相同。在Golang中,我们可以通过crypto/md5包来实现MD5加密算法。

示例代码:

`go

import (

"crypto/md5"

"encoding/hex"

"fmt"

)

// 对字符串进行MD5加密

func Md5Encrypt(str string) string {

md5Ctx := md5.New()

md5Ctx.Write(byte(str))

cipherStr := md5Ctx.Sum(nil)

return hex.EncodeToString(cipherStr)

}

func main() {

str := "hello world"

encryptedStr := Md5Encrypt(str)

fmt.Println("加密前:", str)

fmt.Println("加密后:", encryptedStr)

}

二、AES加密算法AES是一种对称加密算法,它是目前最流行的加密算法之一,具有高效、安全、可靠等特点。在Golang中,我们可以通过crypto/aes包来实现AES加密算法。示例代码:`goimport (    "bytes"    "crypto/aes"    "crypto/cipher"    "encoding/base64"    "fmt") // 对字符串进行AES加密func AesEncrypt(str, key string) (string, error) {    strBytes := byte(str)    keyBytes := byte(key)     block, err := aes.NewCipher(keyBytes)    if err != nil {        return "", err    }     blockSize := block.BlockSize()    strBytes = PKCS5Padding(strBytes, blockSize)     iv := keyBytes     blockMode := cipher.NewCBCEncrypter(block, iv)    cipherText := make(byte, len(strBytes))    blockMode.CryptBlocks(cipherText, strBytes)     return base64.StdEncoding.EncodeToString(cipherText), nil} // 对字符串进行AES解密func AesDecrypt(str, key string) (string, error) {    strBytes, err := base64.StdEncoding.DecodeString(str)    if err != nil {        return "", err    }    keyBytes := byte(key)     block, err := aes.NewCipher(keyBytes)    if err != nil {        return "", err    }     blockSize := block.BlockSize()     iv := keyBytes     blockMode := cipher.NewCBCDecrypter(block, iv)    origData := make(byte, len(strBytes))     blockMode.CryptBlocks(origData, strBytes)    origData = PKCS5UnPadding(origData)     return string(origData), nil} // PKCS5填充func PKCS5Padding(cipherText byte, blockSize int) byte {    padding := blockSize - len(cipherText)%blockSize    padText := bytes.Repeat(byte{byte(padding)}, padding)    return append(cipherText, padText...)} // PKCS5去除填充func PKCS5UnPadding(origData byte) byte {    length := len(origData)    unPadding := int(origData)    return origData} func main() {    str := "hello world"    key := "1234567890123456"     encryptedStr, err := AesEncrypt(str, key)    if err != nil {        fmt.Println("加密失败:", err)        return    }     decryptedStr, err := AesDecrypt(encryptedStr, key)    if err != nil {        fmt.Println("解密失败:", err)        return    }     fmt.Println("加密前:", str)    fmt.Println("加密后:", encryptedStr)    fmt.Println("解密后:", decryptedStr)}

三、RSA加密算法

RSA是一种非对称加密算法,它通过公钥加密、私钥解密的方式实现信息的安全传输。在Golang中,我们可以通过crypto/rsa包来实现RSA加密算法。

示例代码:

`go

import (

"crypto/rand"

"crypto/rsa"

"crypto/x509"

"encoding/base64"

"encoding/pem"

"fmt"

)

// 生成RSA密钥对

func GenerateRsaKeyPair() (*rsa.PrivateKey, error) {

privateKey, err := rsa.GenerateKey(rand.Reader, 2048)

if err != nil {

return nil, err

}

return privateKey, nil

}

// 使用公钥进行RSA加密

func RsaEncrypt(plainText byte, publicKey byte) (byte, error) {

block, _ := pem.Decode(publicKey)

if block == nil {

return nil, fmt.Errorf("public key error")

}

pubInterface, err := x509.ParsePKIXPublicKey(block.Bytes)

if err != nil {

return nil, err

}

pub := pubInterface.(*rsa.PublicKey)

cipherText, err := rsa.EncryptPKCS1v15(rand.Reader, pub, plainText)

if err != nil {

return nil, err

}

return cipherText, nil

}

// 使用私钥进行RSA解密

func RsaDecrypt(cipherText byte, privateKey byte) (byte, error) {

block, _ := pem.Decode(privateKey)

if block == nil {

return nil, fmt.Errorf("private key error")

}

priv, err := x509.ParsePKCS1PrivateKey(block.Bytes)

if err != nil {

return nil, err

}

plainText, err := rsa.DecryptPKCS1v15(rand.Reader, priv, cipherText)

if err != nil {

return nil, err

}

return plainText, nil

}

func main() {

str := "hello world"

privateKey, err := GenerateRsaKeyPair()

if err != nil {

fmt.Println("生成密钥对失败:", err)

return

}

publicKey := &privateKey.PublicKey

cipherText, err := RsaEncrypt(byte(str), byte(publicKey))

if err != nil {

fmt.Println("加密失败:", err)

return

}

plainText, err := RsaDecrypt(cipherText, byte(privateKey))

if err != nil {

fmt.Println("解密失败:", err)

return

}

fmt.Println("加密前:", str)

fmt.Println("加密后:", base64.StdEncoding.EncodeToString(cipherText))

fmt.Println("解密后:", string(plainText))

}

四、总结

本文介绍了Golang中常见的加密与解密算法,包括MD5、AES、RSA等。这些加密算法在实际开发中非常常见,开发者需要在保证信息安全的前提下,选择合适的加密算法来保护数据的安全。同时,本文提供了相应的代码示例,读者可以根据需要进行调整和使用。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

Golang中的加密与解密实践

2023-12-27

如何使用Docker进行部署?

2023-12-27

13无缝集成GoModules

2023-12-27

最新文章NEW

7个提升golang性能的技巧

2023-12-27

GoLand实现高效的代码完成

2023-12-27

Go语言中的内存管理和垃圾回收

2023-12-27

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>