From f740d1516adcb6bd8f24ff6ad695726731d88ed0 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Wed, 9 Apr 2025 18:12:15 +0800 Subject: [PATCH] encryptMobile --- encrypt_mobile.go | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 encrypt_mobile.go diff --git a/encrypt_mobile.go b/encrypt_mobile.go new file mode 100644 index 0000000..57320fa --- /dev/null +++ b/encrypt_mobile.go @@ -0,0 +1,102 @@ +package main + +import ( + "fmt" + "log" + + "tyc-server/pkg/lzkit/crypto" + + "github.com/zeromicro/go-zero/core/stores/sqlx" +) + +const ( + // 请替换为实际的数据库连接信息 + dbHost = "tyc_mysql" + dbPort = "3306" + dbUser = "tyc" + dbPassword = "5vg67b3UNHu8" + dbName = "tyc" + // 请替换为实际的加密密钥 + secretKey = "ff83609b2b24fc73196aac3d3dfb874f" +) + +func main() { + // 连接数据库 + dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + dbUser, dbPassword, dbHost, dbPort, dbName) + db := sqlx.NewMysql(dsn) + + // 加密user表的mobile字段 + if err := encryptUserMobile(db); err != nil { + log.Fatalf("加密user表mobile字段失败: %v", err) + } + + // 加密user_auth表的auth_key字段 + if err := encryptUserAuthKey(db); err != nil { + log.Fatalf("加密user_auth表auth_key字段失败: %v", err) + } + + fmt.Println("加密完成!") +} + +func encryptUserMobile(db sqlx.SqlConn) error { + // 查询所有未加密的手机号 + query := "SELECT id, mobile FROM user WHERE mobile IS NOT NULL AND mobile != ''" + var rows []struct { + ID int64 `db:"id"` + Mobile string `db:"mobile"` + } + if err := db.QueryRows(&rows, query); err != nil { + return fmt.Errorf("查询user表失败: %v", err) + } + + // 准备更新语句 + updateStmt := "UPDATE user SET mobile = ? WHERE id = ?" + + // 处理每一行 + for _, row := range rows { + // 加密手机号 + encryptedMobile, err := crypto.EncryptMobile(row.Mobile, secretKey) + if err != nil { + return fmt.Errorf("加密手机号失败: %v", err) + } + + // 更新数据库 + if _, err := db.Exec(updateStmt, encryptedMobile, row.ID); err != nil { + return fmt.Errorf("更新user表失败: %v", err) + } + } + + return nil +} + +func encryptUserAuthKey(db sqlx.SqlConn) error { + // 查询所有需要加密的auth_key + query := "SELECT id, auth_key FROM user_auth WHERE auth_type = 'app_mobile' AND auth_key IS NOT NULL AND auth_key != ''" + var rows []struct { + ID int64 `db:"id"` + AuthKey string `db:"auth_key"` + } + if err := db.QueryRows(&rows, query); err != nil { + return fmt.Errorf("查询user_auth表失败: %v", err) + } + + // 准备更新语句 + updateStmt := "UPDATE user_auth SET auth_key = ? WHERE id = ?" + + // 处理每一行 + for _, row := range rows { + // 加密auth_key + encryptedAuthKey, err := crypto.EncryptMobile(row.AuthKey, secretKey) + if err != nil { + return fmt.Errorf("加密auth_key失败: %v", err) + } + + // 更新数据库 + if _, err := db.Exec(updateStmt, encryptedAuthKey, row.ID); err != nil { + return fmt.Errorf("更新user_auth表失败: %v", err) + } + } + + return nil +}