go实现简单密码登录并用md5加密存储
时间: 2023-10-07 13:07:41 浏览: 37
好的,我可以帮你解决这个问题。首先,我们可以使用Go语言中的标准库crypto/md5来进行MD5加密,然后将加密后的密码存储在数据库中。具体的实现步骤如下:
1. 导入必要的包
```go
import (
"crypto/md5"
"encoding/hex"
"database/sql"
_ "github.com/go-sql-driver/mysql"
"fmt"
)
```
2. 连接数据库
```go
db, err := sql.Open("mysql", "username:password@tcp(127.0.0.1:3306)/database_name")
if err != nil {
panic(err.Error())
}
defer db.Close()
```
3. 创建user表
```go
createTableSQL := `CREATE TABLE user (
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50),
PRIMARY KEY (id)
);`
_, err = db.Exec(createTableSQL)
if err != nil {
panic(err.Error())
}
```
4. 实现注册功能
```go
func register(username string, password string) error {
stmt, err := db.Prepare("INSERT INTO user(username, password) VALUES(?, ?)")
if err != nil {
return err
}
defer stmt.Close()
passwordHash := md5.Sum([]byte(password))
_, err = stmt.Exec(username, hex.EncodeToString(passwordHash[:]))
if err != nil {
return err
}
return nil
}
```
5. 实现登录功能
```go
func login(username string, password string) (bool, error) {
rows, err := db.Query("SELECT password FROM user WHERE username = ?", username)
if err != nil {
return false, err
}
defer rows.Close()
var dbPassword string
if rows.Next() {
err = rows.Scan(&dbPassword)
if err != nil {
return false, err
}
} else {
return false, nil
}
passwordHash := md5.Sum([]byte(password))
if dbPassword == hex.EncodeToString(passwordHash[:]) {
return true, nil
}
return false, nil
}
```
以上就是一个简单的密码登录并用MD5加密存储的实现方法。需要注意的是,在实际应用中,还需要对密码进行加盐等操作来提高安全性。