【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 ...
随机推荐
- 谷歌浏览器可以google了
做为一个开发者好多疑问点或者难点大多数时间 都在进行百度,百度也能解决问题,但是呢如果让我能够google呢?我肯定会优先google的,这里面能够搜到一些国外技术人的文章可供参考. 下面是一个能够支 ...
- guava学习,集合专题
lists //JDKList<String> list = new ArrayList<String>();list.add("a");list.add( ...
- Btrace 拦截时机
Kind.ENTRY 入口,默认值 Kind.RETURN: 返回 Kind.THROW: 异常 Kind.Line: 行 一.返回时拦截 package com.example.monitor_t ...
- ulimit -a
在linux中执行ulimit -a 即可查询linux相关的参数 用ulimit命令是可以修改这些配置的命令的格式:ulimit [-SHacdefilmnpqrstuvx] [limit] 中间的 ...
- python3-基础8
模块与包 什么是模块 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. #在python中,模块的使用方式都是一样的,但其实细说的话,模块可以分为四个通用类别: 1 ...
- xirr函数
内部收益计算函数 曾经看过一个帖子:有一个理财产品,每年年初存入10000元,每年年底得到利息1000元.持续5年,5年后返还本金50000元:问:利率是多少?下面有个回复:每年存10000,利息10 ...
- Windows7环境下Excel2010中图片超链接默认打开程序修改
在Windows7的环境下,打开Excel2010超链接图片,都是默认用IE打开.搜索了所有的中文网络,没有找到解决方案,且发现受此困扰的人不少.后来用纯英文搜索,终于找到解决方案并尝试成功. 1,操 ...
- bzoj5107: [CodePlus2017]找爸爸
Description 小A最近一直在找自己的爸爸,用什么办法呢,就是DNA比对.小A有一套自己的DNA序列比较方法,其最终目标是最 大化两个DNA序列的相似程度,具体步骤如下:1.给出两个DNA序列 ...
- leetcode70 爬楼梯 Python
组合数学Fibonacci 例3.4.1 (上楼梯问题)某人欲登上n级楼梯,若每次只能跨一级或两级,问他从地面上到第n级楼梯,共有多少种不同的方法? (解)设上到第n级楼梯的方法数为an.分类统计 ...
- Linux下如何查看进程准确启动时间