Files
streamsql/functions/functions_hash.go
2025-06-11 18:45:39 +08:00

110 lines
2.5 KiB
Go

package functions
import (
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
"crypto/sha512"
"fmt"
)
// Md5Function 计算MD5哈希值
type Md5Function struct {
*BaseFunction
}
func NewMd5Function() *Md5Function {
return &Md5Function{
BaseFunction: NewBaseFunction("md5", TypeString, "哈希函数", "计算MD5哈希值", 1, 1),
}
}
func (f *Md5Function) Validate(args []interface{}) error {
return f.ValidateArgCount(args)
}
func (f *Md5Function) Execute(ctx *FunctionContext, args []interface{}) (interface{}, error) {
str, ok := args[0].(string)
if !ok {
return nil, fmt.Errorf("md5 requires string input")
}
hash := md5.Sum([]byte(str))
return fmt.Sprintf("%x", hash), nil
}
// Sha1Function 计算SHA1哈希值
type Sha1Function struct {
*BaseFunction
}
func NewSha1Function() *Sha1Function {
return &Sha1Function{
BaseFunction: NewBaseFunction("sha1", TypeString, "哈希函数", "计算SHA1哈希值", 1, 1),
}
}
func (f *Sha1Function) Validate(args []interface{}) error {
return f.ValidateArgCount(args)
}
func (f *Sha1Function) Execute(ctx *FunctionContext, args []interface{}) (interface{}, error) {
str, ok := args[0].(string)
if !ok {
return nil, fmt.Errorf("sha1 requires string input")
}
hash := sha1.Sum([]byte(str))
return fmt.Sprintf("%x", hash), nil
}
// Sha256Function 计算SHA256哈希值
type Sha256Function struct {
*BaseFunction
}
func NewSha256Function() *Sha256Function {
return &Sha256Function{
BaseFunction: NewBaseFunction("sha256", TypeString, "哈希函数", "计算SHA256哈希值", 1, 1),
}
}
func (f *Sha256Function) Validate(args []interface{}) error {
return f.ValidateArgCount(args)
}
func (f *Sha256Function) Execute(ctx *FunctionContext, args []interface{}) (interface{}, error) {
str, ok := args[0].(string)
if !ok {
return nil, fmt.Errorf("sha256 requires string input")
}
hash := sha256.Sum256([]byte(str))
return fmt.Sprintf("%x", hash), nil
}
// Sha512Function 计算SHA512哈希值
type Sha512Function struct {
*BaseFunction
}
func NewSha512Function() *Sha512Function {
return &Sha512Function{
BaseFunction: NewBaseFunction("sha512", TypeString, "哈希函数", "计算SHA512哈希值", 1, 1),
}
}
func (f *Sha512Function) Validate(args []interface{}) error {
return f.ValidateArgCount(args)
}
func (f *Sha512Function) Execute(ctx *FunctionContext, args []interface{}) (interface{}, error) {
str, ok := args[0].(string)
if !ok {
return nil, fmt.Errorf("sha512 requires string input")
}
hash := sha512.Sum512([]byte(str))
return fmt.Sprintf("%x", hash), nil
}