【18/12/31】hashcat源码粗读 --- sha256部分
还没有详细研究过sha256算法的详细原理,主要是移植cf10算法时,hashcat在cf10_parse_hash时并不是直接调用sha256_update和sha256_final,
而是为了precompute,将其中的步骤展开了,为了弄明白是怎么回事,于是肯定就得粗略研究一下其中的sha256实现了。
1. hashcat中sha256算法大致部分
肯定是这两个部分:
sha256_update_swap();
sha256_final();
其中主要的是转换相关部分是
sha256_transform();
在hashcat中是这样实现的,在cpu_sha256.c的实现也大致这样,不过怎么实现并不是重点。
其实现(太长了,不想放这):
https://www.cnblogs.com/INT18/p/10203589.html
1.1 sha256_update_swap():
△ 奇怪的调用
主要调用sha256_update_64()里有两个嵌套调用:
switch_buffer_by_offset_be_S ();
switch_buffer_by_offset_carry_be_S ();
还有莫名其妙的c0~c3数组。
这个我思考了好一会,搞不明白是干啥的,之后发现是优化相关的,用于调整对齐问题,只思考算法过程的话,不用管。
△ sha256_update_swap()其中大致流程
A. 假设update字符串长度是len,以64为一段分割,分为64, 64, 64 ... len - 64 * n;
B. 对于能被整除的前n个64字节段,进行如下处理:
(判断是前64 * n段还是末端,是通过将for循环和sha256_update_64()实现的)
B.1 以4字节也就是1个整数的长度划,分成16个整数段w0~w15,对wn段进行大小端转换swap(就是倒过来,abcd-->dcba);
B.2 对swap后的段进行一次sha256_transform()转换;
C. 对于末尾段:
swap之后,不进行sha256_transform()转换,留待final时再进行处理;
1.2 sha256_final():
将上述swap后的残余字段,在末尾64bit处填上64位整数模式的字符串长度len,然后对组合后w0~w15整数段进行sha256_transform()转换;
【18/12/31】hashcat源码粗读 --- sha256部分的更多相关文章
- spring-cloud-square源码速读(retrofit + okhttp篇)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos spring-cloud-square系列文章 五分钟 ...
- 31、[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机
31.[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机
- Spark 源码浅读-SparkSubmit
Spark 源码浅读-任务提交SparkSubmit main方法 main方法主要用于初始化日志,然后接着调用doSubmit方法. override def main(args: Array[St ...
- spring-cloud-square源码速读(spring-cloud-square-okhttp篇)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 源码跟读,Spring是如何解析和加载xml中配置的beans
Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086c ...
- Handlebars模板引擎中的each嵌套及源码浅读
若显示效果不佳,可移步到愚安的小窝 Handlebars模板引擎作为时下最流行的模板引擎之一,已然在开发中为我们提供了无数便利.作为一款无语义的模板引擎,Handlebars只提供极少的helper函 ...
- Guava 12:Guava EventBus源码剖析
一.架构速读 传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的.设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦.EventBus不是通用型的发布-订 ...
- 【源码分析】HashMap源码再读-基于Java8
最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...
- 曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
随机推荐
- ftruncate
普通文件或共享内存区的大小都可以通过该函数修改 #include <unistd.h> int ftruncate(int fd,off_t leght); //成功返回0失败返回-1 对 ...
- Python importlib(动态导入模块)
使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test ...
- 记一次java电话面试
答案补充中... 一.java基础 1.简述java的几种基本数据类型 JAVA的基本数据类型有:byte.char.boolean.short.int.long.float.double 2.什么是 ...
- java-log4j日志打印
参考路径: https://blog.csdn.net/edward0830ly/article/details/8250412 https://www.cnblogs.com/ITtangtang/ ...
- pycrypto安装出错的问题 intmax_t C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\inttypes.
前言: 需要安装 Microsoft Visual Studio2017 Community 或者buildtools 解决方案一(解决了python3.7上安装pycrypto-2.6.1的错误问题 ...
- xirr函数
内部收益计算函数 曾经看过一个帖子:有一个理财产品,每年年初存入10000元,每年年底得到利息1000元.持续5年,5年后返还本金50000元:问:利率是多少?下面有个回复:每年存10000,利息10 ...
- iview 3.x InputNumber数字框bug
iview 3.X 版本中InputNumber 数字框组件存在bug,把最小值设置为0.2时,数组框禁止点击,其他数字都是正常.
- Windows 上安装 MySQL(8.0.11)
1.接下来我们需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息: [m ...
- iOS字典转字符串方法
新建Object文件 .h文件中 +(NSString *)convertToJsonData:(NSDictionary *)dict: .m文件中 +(NSString *)convertToJs ...
- 持续更新scrapy的错误,ValueError: Missing scheme in request url:
只需要将 for href in response.xpath('XX').extract(): yield Request(hrefs) 修改为下面,就可以显示出来 for href in resp ...