go手机号脱敏存储使用AES对称加密算法进行手机号的加密和解密

该代码示例展示了如何使用Go语言实现AES对称加密算法来加密和解密手机号。EncryptPhone和DecryptPhone函数分别用于加密和解密,填充数据至16的倍数长度,使用CBC模式进行块加密,并通过Base64编码进行存储。加密密钥的保密性是关键,确保了数据的安全性。
摘要由CSDN通过智能技术生成
import (
    "crypto/aes"
    "crypto/cipher"
    "encoding/base64"
    "fmt"
    "log"
)

// 加密密钥,需要保密,确保安全性
var encryptionKey = []byte("0123456789abcdef")

// EncryptPhone 加密手机号
func EncryptPhone(phone string) (string, error) {
    block, err := aes.NewCipher(encryptionKey)
    if err != nil {
        return "", err
    }

    // 填充手机号到16的倍数长度
    plaintext := []byte(phone)
    padding := aes.BlockSize - (len(plaintext) % aes.BlockSize)
    padText := append(plaintext, bytes.Repeat([]byte{byte(padding)}, padding)...)

    ciphertext := make([]byte, len(padText))
    mode := cipher.NewCBCEncrypter(block, encryptionKey)
    mode.CryptBlocks(ciphertext, padText)

    // 使用 base64 编码转换为可存储的字符串
    encryptedPhone := base64.StdEncoding.EncodeToString(ciphertext)

    return encryptedPhone, nil
}

// DecryptPhone 解密手机号
func DecryptPhone(encryptedPhone string) (string, error) {
    ciphertext, err := base64.StdEncoding.DecodeString(encryptedPhone)
    if err != nil {
        return "", err
    }

    block, err := aes.NewCipher(encryptionKey)
    if err != nil {
        return "", err
    }

    // 解密数据
    decrypted := make([]byte, len(ciphertext))
    mode := cipher.NewCBCDecrypter(block, encryptionKey)
    mode.CryptBlocks(decrypted, ciphertext)

    // 去除填充的数据
    padding := int(decrypted[len(decrypted)-1])
    plaintext := decrypted[:len(decrypted)-padding]

    return string(plaintext), nil
}

func main() {
    phone := "1234567890"

    // 加密手机号
    encrypted, err := EncryptPhone(phone)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Encrypted Phone:", encrypted)

    // 解密手机号
    decrypted, err := DecryptPhone(encrypted)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Decrypted Phone:", decrypted)
}

在示例中,我们使用AES对称加密算法进行手机号的加密和解密。EncryptPhone函数接受一个手机号作为输入,并返回加密后的手机号。DecryptPhone函数接受一个加密后的手机号作为输入,并返回解密后的手机号。

注意,加密密钥encryptionKey需要保密,并确保安全性。请根据实际需求使用更强大的加密算法和更复杂的密钥管理来提高数据安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡忘_cx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值