1-golang_org_x_crypto_bcrypt测试 --go开源库测试
1.实例测试
package mainimport ("fmt""golang.org/x/crypto/bcrypt"
)func main() {password := []byte("mysecretpassword")hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err != nil {fmt.Println(err)}fmt.Println(string(hashedPassword))err = bcrypt.CompareHashAndPassword(hashedPassword, []byte("mysecretpassword"))if err != nil {fmt.Println("密码错误")} else {fmt.Println("密码正确")}
}
2.代码解读
a.main函数开始解读
// 这段Go代码的主要功能是生成并验证一个密码的哈希值:1. 生成哈希值:使用 bcrypt.GenerateFromPassword 函数将明文密码转换为哈希值。
2. 打印哈希值:将生成的哈希值打印到控制台。
3. 验证密码:使用 bcrypt.CompareHashAndPassword 函数将生成的哈希值与明文密码进行比对,验证密码是否正确,并输出相应的结果。// 按住ctrl键,点击 GenerateFromPassword 函数代码
b.查看函数 GenerateFromPassword
// 这段 Go 代码定义了一个名为 GenerateFromPassword 的函数,用于生成密码哈希。具体功能如下:1. 检查输入的密码长度是否超过 72 字节,如果超过则返回错误 ErrPasswordTooLong。
2. 调用 newFromPassword 函数生成一个哈希对象,如果生成过程中出现错误,则返回该错误。
3. 返回生成的哈希值。
c.查看函数 newFromPassword
// 这段Go代码定义了一个名为 newFromPassword 的函数,用于从给定的密码生成一个哈希对象。具体步骤如下:1. 检查并设置成本参数 cost,如果 cost 小于最小值 MinCost,则设置为默认值 DefaultCost。
2. 创建一个新的 hashed 结构体实例 p,并初始化其版本信息。
3. 验证 cost 是否有效,如果无效则返回错误。
4. 生成一个随机盐值 salt,并进行Base64编码。
5. 使用 bcrypt 算法对密码进行哈希处理,生成哈希值 hash。
6. 将生成的 salt 和 hash 存储在 p 中,并返回 p。
d.查看函数 Hash
// 这段Go代码定义了一个名为 Hash 的方法,用于生成一个哈希值。具体功能如下:1. 创建一个长度为60的字节切片 arr。
2. 设置 arr[0] 为 $,arr[1] 为 p.major。
3. 如果 p.minor 不为0,则设置 arr[2] 为 p.minor,并将索引 n 增加到3。
4. 设置 arr[n] 为 $,并增加 n。
5. 将 p.cost 格式化为两位数字符串,并复制到 arr[n:] 中,增加 n。
6. 设置 arr[n] 为 $,并增加 n。
7. 将 p.salt 复制到 arr[n:] 中,增加 n。
8. 将 p.hash 复制到 arr[n:] 中,增加 n。
9. 返回 arr 的前 n 个元素。
e.查看函数 CompareHashAndPassword
// 这段Go代码定义了一个名为 CompareHashAndPassword 的函数,用于比较存储的哈希密码与用户输入的明文密码是否匹配。具体步骤如下:1. 解析哈希密码:通过 newFromHash 函数解析存储的哈希密码,生成一个包含盐值和成本的结构体。
2. 生成新的哈希值:使用相同的盐值和成本对用户输入的明文密码进行哈希处理,生成新的哈希值。
3. 比较哈希值:使用 subtle.ConstantTimeCompare 函数在常量时间内比较两个哈希值是否相等。
4. 返回结果:如果哈希值相等,返回 nil 表示密码匹配;否则返回 ErrMismatchedHashAndPassword 表示密码不匹配。
f.查看函数 newFromHash
// 这段Go代码定义了一个名为 newFromHash 的函数,用于从已哈希的秘密字符串创建一个 hashed 结构体实例。具体功能如下:1. 检查哈希长度:首先检查传入的 hashedSecret 长度是否小于最小哈希长度 minHashSize,如果是则返回错误 ErrHashTooShort。
2. 初始化结构体:创建一个新的 hashed 结构体实例 p。
3. 解码版本信息:调用 decodeVersion 方法解码版本信息,并更新 hashedSecret。
4. 解码成本信息:调用 decodeCost 方法解码成本信息,并再次更新 hashedSecret。
5. 提取盐值:从 hashedSecret 中提取盐值并存储在 p.salt 中。
6. 提取哈希值:从剩余的 hashedSecret 中提取哈希值并存储在 p.hash 中。
7. 返回结果:返回初始化好的 hashed 结构体实例。
g.查看函数 bcrypt
// 这段Go代码实现了bcrypt密码哈希算法的核心部分。具体功能如下:1. 初始化密文数据:创建并初始化一个与magicCipherData相同长度的cipherData数组。
2. 设置Blowfish加密:调用expensiveBlowfishSetup函数,根据给定的密码、成本和盐值设置Blowfish加密器。如果设置过程中出现错误,则返回错误。
3. 加密循环:对cipherData的前24个字节进行多次加密操作,每次加密8个字节,共执行64次。
4. 编码结果:将加密后的前23个字节进行Base64编码,生成最终的哈希值。
相关文章:
1-golang_org_x_crypto_bcrypt测试 --go开源库测试
1.实例测试 package mainimport ("fmt""golang.org/x/crypto/bcrypt" )func main() {password : []byte("mysecretpassword")hashedPassword, err : bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)if err ! nil {fmt.Println(err)…...
C语言菜鸟入门·关键字·union的用法
目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体(union)是一种数据结构,它允许在同一内存位置存储不同的数据类型,但每次只能存储其中一种类型的…...
leetcode hot100【LeetCode 238.除自身以外数组的乘积】java实现
LeetCode 238.除自身以外数组的乘积 题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 …...
【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!
一、前言 Apache JMeter是纯Java的开源软件,最初由Apache软件基金会的Stefano Mazzocchi开发,旨在加载测试功能行为和测量性能。可以使用JMeter进行性能测试,即针对重负载、多用户和并发流量测试Web应用程序。 我们选择JMeter原因 是否测试过…...
嵌入式驱动开发详解3(pinctrl和gpio子系统)
文章目录 前言pinctrl子系统pin引脚配置pinctrl驱动详解 gpio子系统gpio属性配置gpio子系统驱动gpio子系统API函数与gpio子系统相关的of函数 pinctrl和gpio子系统的使用设备树配置驱动层部分用户层部分 前言 如果不用pinctrl和gpio子系统的话,我们开发驱动时需要先…...
使用 OpenCV 进行视频中的行人检测
在计算机视觉领域,行人检测是一个重要的研究方向,它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先,我们需要安装 OpenCV 库。可以通过以下命令来安装&#…...
py文件转pyd文件的那些坑
当编译py脚本文件发给客户使用时,为了保密源代码防止反编译,可以将py文件转换为pyd文件,然后使用pyinstaller工具转换为exe应用程序,但有时测试发现,py文件可以正常运行,转换为pyd文件后却有各种错误&#…...
go interface(接口)使用
在 Go 语言中,接口(interface)是一种抽象类型,它定义了一组方法,但是不实现这些方法。接口指定了一个对象的行为,而不关心对象的具体实现。接口使得代码更加灵活和可扩展。 定义接口 接口使用 type 关键字…...
前端---HTML(一)
HTML_网络的三大基石和html普通文本标签 1.我们要访问网络,需不需要知道,网络上的东西在哪? 为什么我们写,www.baidu.com就能找到百度了呢? 我一拼ping www.baidu.com 就拼到了ip地址: [119.75.218.70]…...
unsloth vlm模型Qwen2-VL、Llama 3.2 Vision微调案例
T4卡15G显卡训练 参考: https://github.com/unslothai/unsloth 按自己显卡cuda版本安装 免费colab微调代码: Qwen2-VL: https://colab.research.google.com/drive/1whHb54GNZMrNxIsi2wm2EY_-Pvo2QyKh?usp=sharing from unsloth import FastVisionModel # NEW instead …...
云网络基础- TCP/IP 协议
文章目录 典型服务模式TCP/IP 协议设置和查看IPIP地址的分类:IP地址组成: 网络位主机位组成克隆:产生一台新的虚拟机win2008 典型服务模式 • C/S,Client/Server架构 – 由服务器提供资源或某种功能 – 客户机使用资源或功能 TCP/IP 协议 • TCP/IP是最广泛支持的通信协议集合…...
【数据分享】2001-2023年我国30米分辨率冬小麦种植分布栅格数据(免费获取)
小麦、玉米、水稻等各类农作物的种植分布数据在农业、环境、国土等很多专业都经常用到! 本次给大家分享的是我国2001-2023年逐年的30米分辨率冬小麦种植分布栅格数据!数据格式为TIFF格式,数据坐标为GCS_WGS_1984。该数据包括我国11个省份的冬…...
前端预览pdf文件流
需求 后端接口返回pdf文件流,实现新窗口预览pdf。 解决方案 把后端返回的pdf文件流转为blob路径,利用浏览器直接预览。 具体实现步骤 1、引入axios import axios from axios;2、创建预览方法(具体使用时将axios的请求路径替换为你的后端…...
【Leetcode 每日一题】146. LRU 缓存(c++)
146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…...
Neural Magic 发布 LLM Compressor:提升大模型推理效率的新工具
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现
案例需求: 完成数据库插入,删除,修改,查看操作。 分为 插入,删除,修改,查看,查询 几个模块。 代码: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…...
为什么DDoS防御很贵?
分布式拒绝服务攻击(DDoS攻击)是一种常见的网络安全威胁,通过大量恶意流量使目标服务器无法提供正常服务。DDoS防御是一项复杂且昂贵的服务,本文将详细探讨为什么DDoS防御如此昂贵,并提供一些实用的代码示例和解决方案…...
Spring Boot3远程调用工具RestClient
Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient,它的使用比RestTemplate方便,开箱即用,不需要单独注入到容器之中,友好的rest风格调用。下面简单的介绍一下该工具的使用。 一、写几个rest风格测试接口 RestCont…...
C51相关实验
C51相关实验 LED //功能:1.让开发板的LED全亮,2,点亮某一个LED,3.让LED3以5Hz的频率闪动#include "reg52.h"#define LED P2 sbit led1 LED^1;void main(void) {LED 0xff;//LED全灭led1 0;while(1)//保持应用程序不退出{} }LED 输出端是高…...
云服务器部署springboot项目、云服务器配置JDK、Tomcat
目录 环境准备:JDK、Tomcat 将两个文件上传刀usr/java目录下并解压: 改java相关文件里的参数 执行以下命令,打开 profile 文件 执行以下命令,读取环境变量: 查看JDK是否安装成功: 改Tomcat参数 项目…...
STM32 USART串口发送
单片机学习! 目录 前言 一、串口发送配置步骤 二、详细步骤 2.1 RCC开启USART和GPIO时钟 2.2 GPIO初始化 2.3 配置USART 2.4 开启USART 2.5 初始化总代码 三、发送数据函数设计 3.1 发送一个字节数据函数 3.2 发送一个数组函数 3.3 发送字符串函数 3.4…...
二叉树的深度搜索专题一>计算布尔二叉树的值
题目: 题目解析: 算法解析: 代码: public boolean evaluateTree(TreeNode root) {if(root.left null && root.right null) return root.val 1 ? true : false;boolean leftTree evaluateTree(root.left);boolean…...
Web day01 html css
目录 1.html: 常用标签: 1.video img p br b u i s : 2.布局标签:div span 3.表单标签: 4.表单标签项: 5.表格标签: 2.css: 1.使用样式: 2.选择器: 3.样式: 1.color: 2. …...
PHP 超级全局变量
超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS:是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。 $_SERVER:$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…...
题目:素数列
思路: 注意审题,题目中的等差素数列指公差相同且每一个元素都是素数的数列,并不是说是所有素数中一段连续且插值相同的数列,它可以是离散的。 因此,只需要暴力的遍历每一个素数,并找以其开头的所有可能等差…...
机器学习系列-决策树
文章目录 1. 决策树原理决策树的构建流程 2. 案例步骤 1:计算当前节点的熵步骤 2:对每个特征计算分裂后的熵(1) 按“天气”分裂数据集(2) 计算分裂后的加权熵 步骤 3:计算分裂依据信息增益信息增益率GINI系数(二叉树) …...
H3C OSPF 多区域实验
目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…...
【Python】 深入理解Python的单元测试:用unittest和pytest进行测试驱动开发
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 单元测试是现代软件开发中的重要组成部分,通过验证代码的功能性、准确性和稳定性,提升代码质量和开发效率。本文章深入介绍Python中两种主流单元测试框架:unittest和pytest,并结合测试驱动开发(TDD)…...
微信小程序中使用iconfont的详细教程
我们知道微信小程序对包体积有很严格的要求,最大不超过2M,而图片资源对包体检有至关重要的影响,所以使用自定义的图标字体来代替大量图标图片也是提高小程序性能的重要手段,总的来说在微信小程序中使用 IconFont(图标字…...
【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容
目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方,就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…...
hue 4.11容器化部署,已结合Hive与Hadoop
配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面: https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意: …...
“软件定义汽车”时代 | 产线海量数据刷写解决方案
一 背景 从起初汽车概念问世时期的“机械定义汽车”,到电力出现后的“电器定义汽车”,再到电子科技迅猛发展后的“电子定义汽车”,再到如今的“软件定义汽车”,可以看出,软件在车辆中扮演着越来越重要的角色。与此同时…...
DDoS对策是什么?详细解读DDoS攻击难以防御的原因与解决方案
近年来,DDoS(分布式拒绝服务)攻击的规模和频率不断增加。根据数据显示,2023年已观测到的最大攻击流量达到700Gbps,远远超出了许多企业的防御能力。DDoS攻击导致的网站性能问题如页面加载缓慢、频繁的504错误等现象&…...
【AI系统】Tensor Core 架构演进
自 Volta 架构时代起,英伟达的 GPU 架构已经明显地转向深度学习领域的优化和创新。2017 年,Volta 架构横空出世,其中引入的张量核心(Tensor Core)设计可谓划时代之作,这一设计专门针对深度学习计算进行了优…...
React前端框架基础知识详解
React 是由 Facebook 推出的一个用于构建用户界面的 JavaScript 库,现已成为前端开发中最流行的框架之一。React 的核心理念是通过组件化的方式构建用户界面,提升代码的可维护性和复用性。本文将为大家详细介绍 React 框架的基础知识,并带你快…...
Python学习——猜拳小游戏
import random player int(input(“请输入:剪刀 0,石头 1,布2”)) computer random.randint(0,2)# print(“玩家输入的是%d,电脑输入的是%d” %(player,computer)) 用于测试 if (player 0) and (computer 0) or (player 1) a…...
Spring:AOP通知类型
我们先来回顾下AOP通知: AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置 通知具体要添加到切入点的哪里? 共提供了5种通知类型: 前置通知后置通知环绕通知(重点)返回后通知(了解)抛出异常后通知(了…...
【公益接口】不定时新增接口,仅供学习
文章日期:2024.11.24 使用工具:Python 文章类型:公益接口 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法ÿ…...
php 导出excel 一个单元格 多张图片
public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…...
Docker3:docker基础1
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...
18. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--账本
这一篇我们来一起为账本功能编写代码。账本功能的代码很简单,就是一些简单的CURD操作。 一、需求 我们先来看一下需求: 编号需求说明1新增账本1. 账本名称不能和用户已有的账本名称重复2删除账本1. 存在收支记录的账本不能删除3修改账本1. 修改的账本…...
GPT1.0 和 GPT2.0 的联系与区别
随着自然语言处理技术的飞速发展,OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表,GPT-1 和 GPT-2 虽然在架构上有着继承关系,但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和…...
在 Taro 中实现系统主题适配:亮/暗模式
目录 背景实现方案方案一:CSS 变量 prefers-color-scheme 媒体查询什么是 prefers-color-scheme?代码示例 方案二:通过 JavaScript 监听系统主题切换 背景 用Taro开发的微信小程序,需求是页面的UI主题想要跟随手机系统的主题适配…...
uni-app 界面TabBar中间大图标设置的两种方法
一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…...
leetcode 无重复字符的最长子串
3. 无重复字符的最长子串 已解答 中等 相关标签 相关企业 提示 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 提示: 0 < s.length < 5 * 104s 由英文字母、数字、符号和空格组成 class Solution:def lengthOfLongest…...
【C++习题】14.滑动窗口_找到字符串中所有字母异位词
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 438. 找到字符串中所有字母异位词 题目描述: 解法 暴力解法: 字母排序后运用滑动窗口解题。 滑动窗口哈希表: 我们可以优化一下&am…...
matplotlib知识
问题与解决 1.module backend_interagg has no attribute FigureCanvas问题 Matplotlib 后端不兼容: matplotlib 使用的后端(如 backend_interagg)可能与当前环境不匹配或未正确加载。 在代码中显式设置一个兼容的后端,例如 TkAgg、Qt5Ag…...
如何在ubuntu上调试core dump
启用core dump 确认ulimit 状态 ulimit -c 如果输出是0,表示core dump被禁用了 运行 ulimit -c unlimited 再次运行 ulimit -c 确认输出是ulimited 设置core dump路径和文件名格式 下面命令表示设置core dump文件在当前目录(%e表示程序名&#x…...
Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序
在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发,提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE,可用于在各种应用程序…...
排序算法1
排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部…...