还没有详细研究过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部分的更多相关文章

  1. spring-cloud-square源码速读(retrofit + okhttp篇)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos spring-cloud-square系列文章 五分钟 ...

  2. 31、[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机

    31.[源码]-AOP原理-AnnotationAwareAspectJAutoProxyCreato机

  3. Spark 源码浅读-SparkSubmit

    Spark 源码浅读-任务提交SparkSubmit main方法 main方法主要用于初始化日志,然后接着调用doSubmit方法. override def main(args: Array[St ...

  4. spring-cloud-square源码速读(spring-cloud-square-okhttp篇)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. 源码跟读,Spring是如何解析和加载xml中配置的beans

    Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086c ...

  6. Handlebars模板引擎中的each嵌套及源码浅读

    若显示效果不佳,可移步到愚安的小窝 Handlebars模板引擎作为时下最流行的模板引擎之一,已然在开发中为我们提供了无数便利.作为一款无语义的模板引擎,Handlebars只提供极少的helper函 ...

  7. Guava 12:Guava EventBus源码剖析

    一.架构速读 传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的.设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦.EventBus不是通用型的发布-订 ...

  8. 【源码分析】HashMap源码再读-基于Java8

    最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...

  9. 曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

随机推荐

  1. js/php判断移动端还是PC端

    if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobi ...

  2. 记一次java电话面试

    答案补充中... 一.java基础 1.简述java的几种基本数据类型 JAVA的基本数据类型有:byte.char.boolean.short.int.long.float.double 2.什么是 ...

  3. cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx'

    解决方法 在创建 Node节点后 调用父节点 retain() 方法 手动增加引用 一般调用:clone()方法会出现,在变量后面加上对一个对应的retain() 方法

  4. 作业---修改haproxy配置文件

    #查询 f=open("C:\\aaaaaaaaaaaaa\\haproxy.txt", "r", encoding="utf-8") ha ...

  5. Visual studio 调试发布到IIS站点方式一

    在项目开发过程中,前端项目可能调用多个API接口,并且这些API接口是在同一个资源解决方案下的,一个资源解决方案下只能设置一个启动项目.那么问题来了,某个API业务需求变更或有BUG,解决后是需要调试 ...

  6. 易酷 cms2.5 本地文件包含漏洞 getshell

    易酷 cms2.5  本地文件包含漏洞 getshell 首先下载源码安装(http://127.0.0.1/test/ekucms2.5/install.php) 安装成功直接进行复现吧 本地包含一 ...

  7. 2018/12/20 20:52:42 螺纹钢PTA豆粕

    如期向上,但是一点办法没有:没有好的入场位,不做不算错,面对诱惑不动如山也是一种修养,今晚看M5有没有3买,有的话可以看情况考虑要不要进场 PTA M30向下一笔过程中,等待M30当前一笔下跌结束,可 ...

  8. Flume概念与原理、与Kafka优势对比《转》

    https://blog.csdn.net/gyshun/article/details/79710534

  9. ES6-map、filter、find、findIndex讲解

    map方法:可以简单的理解为映射 var arr=[1,2,3,4]; console.log( arr.map((n)=>n*n) );//[1, 4, 9, 16] console.log( ...

  10. How to compile tensorflow on CentOS

    Tensorflow is a very effective machine learning library implemented by C++, we can use tensorflow wi ...