package cryptoutil import ( "crypto/aes" "crypto/cipher" "encoding/base64" ) const ( scAESKey = "m1xp9slgfa|su@m2" scAESIV = "pa!st17m@04h5u#0" ) // EncryptSC AES-CBC加密,使用固定的key和iv func EncryptSC(plaintext string) string { key := []byte(scAESKey) iv := []byte(scAESIV) block, err := aes.NewCipher(key) if err != nil { return "" } // PKCS7填充 blockSize := block.BlockSize() padding := blockSize - len(plaintext)%blockSize padText := make([]byte, padding) for i := range padText { padText[i] = byte(padding) } plaintextBytes := append([]byte(plaintext), padText...) // CBC加密 ciphertext := make([]byte, len(plaintextBytes)) mode := cipher.NewCBCEncrypter(block, iv) mode.CryptBlocks(ciphertext, plaintextBytes) // Base64编码 return base64.StdEncoding.EncodeToString(ciphertext) } // DecryptSC AES-CBC解密,使用固定的key和iv func DecryptSC(ciphertext string) string { key := []byte(scAESKey) iv := []byte(scAESIV) // Base64解码 ciphertextBytes, err := base64.StdEncoding.DecodeString(ciphertext) if err != nil { return "" } block, err := aes.NewCipher(key) if err != nil { return "" } // CBC解密 blockSize := block.BlockSize() if len(ciphertextBytes)%blockSize != 0 { return "" } plaintext := make([]byte, len(ciphertextBytes)) mode := cipher.NewCBCDecrypter(block, iv) mode.CryptBlocks(plaintext, ciphertextBytes) // 去除PKCS7填充 if len(plaintext) == 0 { return "" } padding := int(plaintext[len(plaintext)-1]) if padding <= 0 || padding > blockSize || padding > len(plaintext) { return "" } return string(plaintext[:len(plaintext)-padding]) }