还没有详细研究过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. JVM GC机制

    垃圾收集主要是针对堆和方法区进行. 回收机制: 现在的JVM基本都使用分代回收机制,把堆中内存区域分为新生代,老年代. 新生代: Eden(80%) Survivor0(10%) Survivor1( ...

  2. 【Oracle】group by 和partition by的区别

    总结: group 单纯分组 partition 也能分组,但还具备累计的功能 order by 排序,与计算函数联用,需要累加计算 0.select * from test;     ---测试数据 ...

  3. 第三节 Python基础之数据类型(列表,元组,字典)

    列表,简单说就是用[]括起来的一大堆数据,这些数据我们叫做元素,元素与元素之间用","隔开,这些元素可以是数字,布尔值,字符串,列表等等,基本所有的数据类型都可以放在列表里边,同时 ...

  4. LCD LED OLED区别 以及RGB、YUV和HSV颜色空间模型

    led 液晶本身不发光,而是有背光作为灯源,白色是由红绿蓝三色组成,黑色是,液晶挡住了led灯光穿过显示器. lcd比led更薄. oled:显示黑色时,灯是灭的,所以显示黑色更深,效果更好. 这就不 ...

  5. EVM项目管理

    详细参照:https://zhuanlan.zhihu.com/p/33925657 报告日实际: 按预算完成 按原始cpi完成 按时完成

  6. JavaScript 原型和对象创建底层原理

    1. prototype/__proto__/constructor JS原型链和继承网上已经烂大街了,5毛可以买一堆,这里只提一下: constructor:普通对象和函数对象都有,指向创建它的函数 ...

  7. ajax(读取json数据)

    ajax知识点: 语法:$.ajax(路由,请求方式,返回的数据类型,数据参数,回调函数) url: "路由", type:"",默认get请求(get或pos ...

  8. js对象的创建

    一.通过对象直接量来创建 var emptyt={};  //相当于var empty=new Object; //如果属性名中包含空格.连字符(-).还有关键字,保留字时,要用字符串表示 var b ...

  9. Tree Traversals Again

    An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example ...

  10. 5DAY高级权限

    5DAY高级权限 0xff001 suid\sgid\sticky ; s\s\t ; 4\2\1特殊位 001.描述 suid,sgid针对文件程序时,具备临时提升权限 sgid 针对目录时,该目录 ...