首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

密码学系列之:Argon2加密算法详解

简介 Argon2是一个密钥推导函数,在2015年7月被选为密码哈希大赛的冠军,它由卢森堡大学的Alex Biryukov、Daniel Dinu和Dmitry Khovratovich设计,Argon2...密钥推导函数key derivation function 在密码学中,密钥推导函数(KDF)是一种密码学哈希函数,它使用伪随机函数从一个秘密值(如主密钥、密码或口令)中推导出一个或多个密钥。...Argon2i、Argon2d和Argon2id。...‘ 内存大小 m, 单位是兆,值取 8p232-1。 迭代器的个数t,提升运行速度。取值1232-1。 版本号v,一个字节,取值0x13。 安全值 K , 长度是0232-1字节。...附加数据 X,长度是0232-1字节。 Argon2的类型,0代表Argon2d,1代表Argon2i,2代表Argon2id

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

基于Go实现数据库索引的哈希表:从0优化

目录前言数据库索引概述从零实现基于哈希表的数据库索引设计思路优化前后的性能对比具体示例源码优劣评估结束语前言作为开发者,尤其是做后端开发,对于数据库索引相关内容应该非常熟悉,尤其是涉及数据库查询时候,...最近在做关于Go语言相关的学习使用,正好涉及数据库查询相关的内容,那么本文就来详细介绍数据库索引的概念,并使用Go语言从零开始逐步实现基于哈希表的数据库索引,而且会分享一下设计思路,并对优化前后的性能进行对比...先来分享一下实现的思路,先需要定义一个哈希表数据结构,用于存储索引键值对;然后通过哈希函数将键值映射到哈希表中的槽位。...当进行查询的时候,可以通过哈希函数快速定位对应的槽位,从而获取存储在该槽位中的数据。这就是一个完整的实现哈希表的数据库索引操作步骤,下面会分享详细的实现示例代码。...关于哈希函数的选择:我们要选择一个高效的哈希函数,能够尽可能均匀地将键值映射到哈希表的槽位,这样可以尽可能均匀地分布数据,减少哈希冲突的发生。

18053

从01打牢算法基础之手写一个哈希

从01打牢算法基础之手写一个哈希表 0.导语 目的:手写实现一个哈希表,采用拉链法构建,每个hash(key)对应的是一个红黑树。 看起来很简单,但可以学到很多东西。实现语言:C++。...1.简易版哈希表 我们将哈希表封装在一个类中,完成遍历的定义与声明以及构造、析构的实现: template class HashTable {...,里面有一个比较重要的哈希函数,这里我们先自己定义一个: /** * 哈希函数 * @param key * @return */ int hashFunc(Key key) { std::hash...* @return */ Value minCapacity() { return M * lowerTol; } ★resize函数 ” 完成动态调整内存,将原来内存中的内容拷贝新分配的空间...1.优化哈希表 在gcc2.9版本中,底层的哈希表是以素数作为容量动态修改的,因此这里的优化从这里出发: 类内部开头添加下面数组: // 素数数组 const vector capacity

1.1K20

一文读懂以太坊存储数据核心数据结构:MPT

所以就有了 Patricia 树 (压缩前缀树),后面会介绍。 Merkle树 Merkle树,也被称为 Hash Tree,中文名称:默克尔树,主要用于数据集较大时的文件校验。...从上图中可以看出: 在最底层,和哈希列表一样,我们把数据分成小的数据块,有相应地哈希和它对应; 往上走,并不是直接去运算根哈希,而是把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希就结婚生子...如果最底层的哈希总数是单数,那到最后必然出现一个单身哈希,这种情况就直接对它进行哈希运算,所以也能得到它的子哈希再往上推,依然是一样的方式,可以得到数目更少的新一级哈希; 最终必然形成一棵倒挂的树,到了树根的这个位置...所以前16个必将落入在其遍历中的键的十六个可能的半字节值中的每一个。...比如key=>"bob",b的ASCII十六进制编码为0x62,o的ASCII十六进制编码为0x6f,分解成高四位和第四位,16表示终结 0x10,最终编码结果为[6 2 6 15 6 2 16];b)

3.1K72

佛萨奇2.0原力元宇宙马蹄莲智能合约系统开发详情及原理

智能合约开发语言和虚拟机“长安链·ChainMaker”目前已经支持使用Golang、Rust、Solidity、TinyGo、C++进行智能合约开发,每种开发语言实现的合约由不同的虚拟机执行,在将合约发布链上时通过...用户地址——根据用户的SKI(SubjectKeyId)计算keccak256哈希,然后截取哈希值的后20字节,对外展示时,会再转换为十六进制字符串形式;合约地址——根据合约名计算keccak256哈希...,然后截取哈希值的后20字节,对外展示时,会再转换为十六进制字符串形式。...用户地址——对用户的公钥序列化后,计算sm3哈希,然后截取哈希值的前20字节,对外展示时,会再转换为十六进制字符串形式,并添加”ZX“前缀;合约地址——根据合约名计算sm3哈希,然后截取哈希值的前20字节...用户地址——对用户公钥序列化后,计算keccak256哈希,然后截取哈希值的后20字节,对外展示时,会再转换为十六进制字符串形式;合约地址——根据合约名计算keccak256哈希,然后截取哈希值的后20

66520

这几个功能也太好用了!

hexed.it 十六进制编辑器相信大家不会陌生,尤其是网络安全行业的同学,经常会使用它来查看文件、修改文件、编辑文件、编写exploit、shellcode等等。...这是一个在线网页版的十六进制编辑器,浏览器里就能用,而且访问还很快。网址就是名字:https://hexed.it,很好记:hex + edit,十六进制编辑的意思。...哈希计算 计算文件的各种哈希值是基本操作: 哈希查询 自带了咱们常用的一些平台哈希查询,像是Google、VirusTotal、Hybrid等等: 直方图 直方图功能把文件的所有出现的字节进行了0x00...用这个工具就简单省事的多,直接把代码copy这里,一键download成本地图片,不要太方便。...还可以拷贝成URL,将代码潜入URL中,这样别人打开URL就能在你的基础上编辑了。当然代码太长的话就不适合了,那样构建的URL就太长了。

72520

SQL注入与原始的MD5散列(Leet More CTF 2010注入300)

诀窍:原始MD5哈希在SQL中是危险的 在这个挑战中的诀窍是PHP的md5()函数可以以十六进制或原始形式返回其输出。...考虑这个问题一段时间,并与MySQL玩了很多,我能够缩短我的注射到只有5个字符: '||' 1 这会产生一个像这样的SQL语句(假设我的注入恰好落在了MD5哈希的中间,假装xxxx是随机数据):...砍掉另一个角色,并进行更多的改进 由于从19的任何数字都可以在我的注射中工作,所以我可以缩短我的注射线'||',然后检查注射线是否跟着19的数字(非常便宜的检查)。...最后的散列 在计算出只有1900万个MD5哈希之后,我的程序找到了一个答案: 内容:129581926211651571912466741651878684928 计数:18933549 十六进制...所以我提交了密码129581926211651571912466741651878684928PHP脚本,它的工作!我能看到这个表格 最后一步 挑战的最后一步是将MD5哈希转换为密码。

1.3K40

《Java从入门失业》第一章:计算机基础知识(1.1):二进制和十六进制

(当然,由于能力有限,只能点到为止,如果特别有兴趣的朋友,请出门右转,参阅更加专业的书籍) 1.1二进制、十六进制        这一小节,先来掌握一些数学知识:二进制和十六进制。为啥要学这个呢?...这里,我们把十进制就搞明白了,可以总结十进制的特点如下: 一共有0~9共10个数字 每个位上的数字取值范围为0~9 同位的两个数字相加,逢10进1 相邻的2个位,差别是10倍 假设一个十进制数值N,一共有...1.1.3十六进制 太棒了,我们已经搞明白了二进制,聪明的同学又要问了,计算机中都是0和1,学习了二进制就可以了,为啥要学习十六进制呢?...哇塞,好神奇,都是16,好像找到规律了,对了,就是可以把一个二进制数,4个4个的打包,用一个十六进制数表示,这样就大大的缩短了一个二进制数的书写。...我数了一下,一共34位,先把位数补齐为4的倍数补36位:0b001011111110101001110101011000110001,然后从低位高位,4个一组打包,列表如下: 打包项 十进制 十六进制

58220

探索Linux的md5sum命令:保障数据完整性的利器

MD5(Message-Digest Algorithm 5)是一种广泛使用的密码哈希函数,它接受任意长度的数据作为输入,并输出一个128位的哈希值(通常以32个十六进制数字表示)。...由于MD5算法的数学特性,即使原始数据发生微小变化,其哈希值也会发生显著变化。因此,通过比较哈希值,我们可以快速检测数据是否完整无损。...唯一性:对于不同的输入数据,MD5算法几乎总是生成不同的哈希值(尽管存在哈希碰撞的可能性,但在实际应用中极为罕见)。确定性:相同的输入数据始终产生相同的哈希值。...md5sum命令的常用参数包括:-b:以二进制模式读取和输出哈希值(默认是十六进制)。-c:从文件中读取哈希值并进行校验。通常与-t参数一起使用,以指定输入文件的类型。...如果数据被篡改或丢失,你应该能够快速恢复一个已知的、安全的状态。

7610

山东大学密码学引论复习重点总结与期末试题

考察的重要知识点包括 香农定理 完美加密(完美加密的定义与证明) 一次一密 对称加密与非对称加密的基本思想 哈希函数的基本知识 Vigenere 加密 Elgamal实现过程 序列化与反序列化 试题回顾...(5分) 4)请给出哈希函数的三种安全级别。(5分) 三、计算题(25分) 允许使用计算器。回答题目时,需要以文字形式写出计算过程。...1)使用Vigenere 算法(字节版本)对以下十六进制字符串表示的字节数组进行加密,将加密结果以十六进制字符串表示: 明文:DEADBEEF 密钥:A1B2C3D4 四、问答题(25分) 1)...为何网站存储用户的密码时,不能存储密码的明文,而是存储密码的加盐哈希结果?...代码中涉及的每个变量都需要添加类型提示。(8分)

60911

Swissknife:脚本化的数据生成与篡改VSCode扩展

当前可用的脚本 Base64解码 Base64编码 二进制转文本 Bip39助记符 CSV转Markdown 字符计数 单词计数 加密货币值 日期转时间戳 椭圆曲线密钥对 生成密码 HTML编码(全部) 十六进制解码...十六进制编码 十六进制转RGB 标识哈希 JWT解码 Markdown转HTML Md5哈希 新Swissknife脚本(JS) 新Swissknife脚本(TS) 密码长度 RGB转十六进制 RSA...密钥对 随机字符串 请求获取 SHA1哈希 SHA256哈希 SHA512哈希 自签名证书 启动本地HTTP服务器 启动本地HTTPS服务器 停止HTTP服务器 文本转二进制 文本转字符串 时间戳转日期...操作的结果可能返回多个值,因为来自不同算法的哈希具有相同的输出格式。...我们仍然按照最相关的顺序从上到下组织哈希。 HTTPS(S)服务器 服务器会将接收到的所有请求记录到VSCode的“Output”窗口中(你可以通过进入菜单中的view->Output来查看)。

1.3K40

深入理解SHA系列哈希算法:安全性的保障与演进

初始化哈希值:SHA算法使用一组初始哈希值作为计算的起点。这些初始哈希值是根据特定的数学常数生成的,以确保算法的安全性和随机性。...输出哈希值:处理完所有分组后,得到的最终结果就是输入数据的哈希值。这个哈希值是一个固定长度的数字串(如SHA-256输出的哈希值为256位),通常表示为十六进制数。...byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8)); // 将字节转换为十六进制格式的字符串...); // 只更新实际读取的字节 } byte[] hashBytes = digest.digest(); // 将字节转换为十六进制格式的字符串...从SHA-0SHA-1,再到SHA-2和SHA-3,每一个版本的更新都代表着密码学领域对安全性和性能的不断追求。在选择哈希算法时,应根据具体的应用场景和安全需求来选择合适的算法版本。

74500

哈希函数的理解

图解示例 我们可以把哈希函数想象成搅拌机,如下图所示。 将数据放进搅拌机里 经过哈希函数计算后,搅拌机会输出固定长度的无规律数值。输出的无规律数值就是“哈希值”。...哈希值虽然是数字,但多用十六进制来表示。 计算机使用二进制管理所有数据,虽然哈希值是用十六进制表示的,但它也是数据,计算机在存储哈希值时,会通过计算将其转换为二进制进行管理。...哈希函数的特征 哈希值的长度与输入数据的大小的无关 输入相同数据,输出的哈希值也必定相同 输入相似的数据,输出的哈希值必定不同。 输入的数据完全不同,但输出的哈希值可能是相同的。...虽然这种情况的出现概率较低,这种情况就叫做“哈希冲突” 哈希值是不可逆的,通过哈希值不可能反向推算出原本的数据。...当用户输入密码时,先算出该密码的哈希值,再把它和服务器中的哈希值进行比对。这样一来,就算保存的哈希值暴露了,鉴于哈希函数“哈希值不可逆”的特征,第三者也无法得知原本的密码。

70250

应用:区块链钱包开发,交易平台系统搭建技术细节

ws.WalletsMap = make(map[string]*Wallet) //加载本地钱包,把新建的钱包保存到本地 ws.loadFile() return &ws}创建钱包钱包集...ws.WalletsMap[address] = wallet //保存包本地 ws.saveToFile() //返回创建钱包的地址 return address}保存钱包本地...,计算RIPEMD-160哈希值取上一步结果,前面加上版本号(比特币主网版本号“0x00”)取上一步结果,计算SHA-256哈希值取上一步结果,计算SHA-256哈希值取上一步结果的前4个字节(8位十六进制...)把这4个字节加在第五步的结果后面,作为校验(这就是比特币地址的十六进制形态)用base58表示法变换一下地址(这就是常见的比特币地址形态)//生成地址func (w *Wallet) NewAddress...//校验码checksum checkCode := CheckSum(payload) //拼接版本、哈希值、校验码、25字节数据 payload = append(payload,

1.1K40

太牛了!还没毕业就搞出个21k star的项目!

这几天看到了一个 21k star 的开源项目,一款名为 ImHex 的十六进制编辑器,功能强大很好用。但是让小妹震惊的是,这居然是一名 21 岁的瑞士大学生开发的。...ImHex 的功能极为丰富,小妹能看懂的功能如下: 独具特色的十六进制视图,支持字节修复、将字节拷贝为各种语言的数组方便你使用,以及字节的高亮显示 深色模式 数据导入导出 支持大文件的快速加载 支持直接获取文件的哈希值...打开文件 我们来打开一个 class 格式的文件看看十六进制是什么样的吧。...双击十六进制文本即可直接修改,很方便。 书签 书签功能也很方便,选中一段十六进制的文本,右键添加书签,这样就可以方便的在右侧的书签栏中快速定位标记的位置。...总结 好了,ImHex 就简单的介绍这里,个人感觉它功能强大,界面丰富,支持 Windows、macOS、Linux全平台并且可以选择中文,是一款很好用的工具。更多的功能,就留给大家继续探索吧!

27110
领券