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://walker-learn.xyz/archives/4779

(0)
Walker的头像Walker
上一篇 2025年11月25日 05:00
下一篇 2025年11月25日 03:00

相关推荐

  • 深入理解ES6 002【学习笔记】

    字符串和正则表达式 字符串和正则表达式 Javascript字符串一直基于16位字符编码(UTF-16)进行构建。每16位的序列是一个编码单元(code unit),代表一个字符。length、charAt()等字符串属性和方法都基于这个编码单元构造的。Unicode的目标是为世界上每一个字符提供全球唯一的标识符。如果我们把字符长度限制在16位,码位数量将不…

    个人 2025年3月8日
    1.8K00
  • 从0到1落地微前端架构 001【学习笔记】

    微前端 js 隔离css 隔离元素隔离生命周期预加载数据通信应用跳转多层嵌套 说明 使用的是 Mermaid 的 flowchart 语法,Markdown 渲染器如 Typora、VitePress、一些 Git 平台都支持。 保留了: 基座应用 main-vue3 各子应用:child-nuxt2-home、child-vue2-job、child-vu…

    2025年4月20日
    1.5K00
  • TS珠峰 001【学习笔记】

    课程大纲 搭建 TypeScript 开发环境。 掌握 TypeScript 的基础类型,联合类型和交叉类型。 详细类型断言的作用和用法。 掌握 TypeScript 中函数、类的类型声明方式。 掌握类型别名、接口的作用和定义。 掌握泛型的应用场景,熟练应用泛型。 灵活运用条件类型、映射类型与内置类型。 创建和使用自定义类型。 理解命名空间、模块的概念已经使…

    个人 2025年3月27日
    1.5K00
  • 【开篇】

    我是Walker,生于八十年代初,代码与生活的旅者。全栈开发工程师,游走于前端与后端的边界,执着于技术与艺术的交汇点。 代码,是我编织梦想的语言;项目,是我刻画未来的画布。在键盘的敲击声中,我探索技术的无尽可能,让灵感在代码里永恒绽放。 深度咖啡爱好者,迷恋每一杯手冲的诗意与仪式感。在咖啡的醇香与苦涩中,寻找专注与灵感,亦如在开发的世界中追求极致与平衡。 骑…

    2025年2月6日 个人
    2.2K00
  • 深入理解ES6 008【学习笔记】

    迭代器(Iterator)和生成器(Generator) 这个新特性对于高效的数据处理而言是不可或缺的,你也会发现在语言的其他特性中也都有迭代器的身影:新的for-of循环、展开运算符(...)、甚至连异步编程都可以使用迭代器。 迭代器是一种特殊的对象,它具有一些专门为迭代过程设计的专有接口,所有的迭代器对象都有一个next()方法,每次调用都返回一个结果对…

    个人 2025年3月8日
    1.1K00
简体中文 繁體中文 English
欢迎🌹 Coding never stops, keep learning! 💡💻 光临🌹