Go工程师体系课 005

微服务开发

创建一个微服务项目,所有的项目微服务都在这个项目中进行,创建joyshop_srv,我们无创建用户登录注册服务,所以我们在项目目录下再创建一个目录
user_srvuser_srv/global(全局的对象新建和初始化)
user_srv/handler(业务逻辑代码)
user_srv/model(用户相关的 model)
user_srv/proto(用户相关的 model)
main.go 服务启动文件

密码我们采用 md5 加密

1. Message Digest Algorithm 5(MD5)信息摘要算法

MD5 是一种常见的哈希算法,其主要特性如下:

  1. 压缩性
    任意长度的数据,计算出的 MD5 值长度都是固定的。

  2. 容易计算
    从原始数据计算出 MD5 值非常容易。

  3. 抗修改性
    对原数据进行任何修改,哪怕只是一个字节,所产生的 MD5 值差异都很大。

  4. 强碰撞性
    想找到两个不同的数据,使它们具有相同的 MD5 值,非常困难。

  5. 不可逆性
    不可反解,无法通过 MD5 值还原出原始数据。

MD5 盐值加密

1. 加盐的目的

为了增强 MD5 加密的安全性,防止彩虹表攻击,通常会给原始数据添加 "salt"(盐值)再进行 MD5 加密。

2. 加盐方法

  1. 通过生成随机数和 MD5 生成字符串进行组合

  2. 将随机生成的 salt 值与原始密码进行拼接后再进行 MD5 加密。

  3. 如:md5( password + salt )

  4. 数据库同时存储 MD5 值和 salt 值

  5. 在注册时:生成 salt、计算加盐后的 MD5,一并存入数据库。
  6. 在验证时:取出 salt,重新加密对比 MD5 值即可。
// 设置加密参数
options := &password.Options{
 SaltLen:      16,
 Iterations:   100,
 KeyLen:       32,
 HashFunction: sha512.New,
}

// 1. 加密
salt, encodedPwd := password.Encode("your_password", options)
final := fmt.Sprintf("$pbkdf2-sha512$%s$%s", salt, encodedPwd)

// 2. 拆分(模拟从数据库读取)
parts := strings.Split(final, "$")
saltFromDb := parts[2]
hashFromDb := parts[3]

// 3. 验证
ok := password.Verify("your_password", saltFromDb, hashFromDb, options)
fmt.Println("验证是否通过:", ok)

主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://www.walker-learn.xyz/archives/6751

(0)
Walker的头像Walker
上一篇 2026年3月7日 05:00
下一篇 2026年3月7日 03:00

相关推荐

  • Go工程师体系课 014

    rocketmq 快速入门 去我们的各种配置(podman)看是怎么安装的 概念介绍 RocketMQ 是阿里开源、Apache 顶级项目的分布式消息中间件,核心组件: NameServer:服务发现与路由 Broker:消息存储、投递、拉取 Producer:消息生产者(发送消息) Consumer:消息消费者(订阅并消费消息) Topic/Tag:主题/…

    后端开发 2026年3月6日
    7500
  • Go工程师体系课 013

    订单事务 先扣库存 后扣库存 都会对库存和订单都会有影响, 所以要使用分布式事务 业务(下单不对付)业务问题 支付成功再扣减(下单了,支付时没库存了) 订单扣减,不支付(订单超时归还)【常用方式】 事务和分布式事务 1. 什么是事务? 事务(Transaction)是数据库管理系统中的一个重要概念,它是一组数据库操作的集合,这些操作要么全部成功执行,要么全部…

    后端开发 2026年3月7日
    6700
  • Go工程师体系课 010

    es 安装 elasticsearch(理解为库) kibana(理解为连接工具)es 和 kibana(5601) 的版本要保持一致 MySQL 对照学习 Elasticsearch(ES) 术语对照 MySQL Elasticsearch database index(索引) table type(7.x 起固定为 _doc,8.x 彻底移除多 type…

    后端开发 2026年3月7日
    7000
  • Go工程师体系课 007

    商品微服务 实体结构说明 本模块包含以下核心实体: 商品(Goods) 商品分类(Category) 品牌(Brands) 轮播图(Banner) 品牌分类(GoodsCategoryBrand) 1. 商品(Goods) 描述平台中实际展示和销售的商品信息。 字段说明 字段名 类型 说明 name String 商品名称,必填 brand Pointer …

    后端开发 2026年3月7日
    6700
  • Go工程师体系课 015

    Docker 容器化 —— Go 项目实战指南 一、Docker 核心概念 1.1 什么是 Docker Docker 是一个开源的容器化平台,它可以将应用程序及其所有依赖项打包到一个标准化的单元(容器)中,从而实现"一次构建,到处运行"。对于 Go 开发者而言,Docker 解决了以下痛点: 开发环境与生产环境不一致 依赖管理复杂(数据库、缓存、消息队列等…

    后端开发 2026年3月6日
    7200
简体中文 繁体中文 English