资源简介

sha3 512 hash 算法 python正确实现 ,内含各种sha3 keccak 官方文档和代码,收集和写代码花费了巨大精力,走了不少弯路 自己写代码不容易,请尊重原作者 下面给出一些实例用于检验: 哈希('')='a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26' hash('123456')='64d09d9930c8ecf79e513167a588cb75439b762ce8f9b22ea59765f32aa74ca19d2f1e97dc922a3d4954594a05062917fb24d1f8e72f2ed02a58ed7534f94d27' sha3('我加密成功了')='d73ce7502406782345ff4f00133acee8eacde2fc7d6522bd6489f94c28b1e7e0837967ff36b9555e2d4eed547c7df4676f2035cd05ed0be3f79da14f9f0d1e68' 可以用 python3.6 自带 hashlib 库检验 注:代码直接运行即可

资源截图

代码片段和文件信息

“““
      Author: John
      sha3 哈希加密算法,不可逆
      Keccak算法,sha家族最新算法,采用的不同于 MD(如md5) 结构的海绵结构(sponge结构),使常用于攻击 MD 结构的手段难以进行
      增强了算法安全性
      successfully!!! 任意加密均可
      FIPS 202 - SHA-3 Standard
      https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values
      关于 sha3 的例子

      主要过程是:明文转换成 16 进制,再转换成 2 进制,因为 utf8 编码明文后成 16 进制形式后,明文比特数至少是 4 的倍数,所以填充明文首先加 16 进制 06
      然后,末尾加 80 中间填充 0,然后进行小端转换,再进行加密;
      加密主函数中每组明文,首轮加密前进行二维数组矩阵转置,之后进行 Round 函数加密,然后最后一轮加密后,再进行矩阵转置,相当于每组明文加密转置了两次,
      或者某种程度上可以说没转置;
      全部加密完成后,再进行小端转换得 sha3 hash 值。
      注:1、最新 sha3 加密过程,并不包含 1 字节中 高位在后,低位在前 的规则,如果非要说由此规则,那就是填充时末尾加16进制 80
          2、小端转换是 8 字节,类似于 C语言 long 类型转换
          3、假如填充完一组明文后(明文总共一组 r-8 bit 明文,那么填充后明文后,需加 16 进制 86   此处是重点*******)
“““
import hashlib
import binascii as ba
import math

‘‘‘
   A 三维空间分布如下:
   x 轴为一行(row)5 bit,y 轴为一列(column)5 bit,z 轴为一道(lane) 64 bit,xoy 面为一片(slice),yoz 面为一板(sheet),xoz 面为一面(plane)

   θ变换是将每比特附近的两列(column)的和叠加到该比特上,x和y的坐标都是模5的
   θ变换是线性的,主要是为了达到扩散效果,θ变换在所有方向上均是不变体转换,若没有θ变换,Keccak-f的轮函数将无法提供有效的扩散效果
   (扩散的意思是让每一个数据都沾染临近两列的血,对最后生成的hash值有初始明文每个字符都参与生成此hash值的感觉)
   θ变换的影响可以描述为:将三维数组A[x][y][z]中的每个比特逐位与相邻的两列(column)异或,即A[x-1][·][z]和A[x+1][·][z-1]
   θ变换
   
   *****本算法采用二维数组表示,将 z 轴一道合为一个元素,但基本思想一致
‘‘‘
# 模拟常量的假变量区
W = 64

‘‘‘
   步骤ρ包含一个lane(道)内部的转换(即循环道内移位),目的是为提供一个slice(片)内部的离差
   以下是移位表:x 为 x 轴 ,y 为 y 轴,表中为 z 轴数据移位位数
                      x=0  1  2   3   4
                  y=0   0 1 62 28 27
                    1  3644 6  55 20
                    2   310 43 25 39
                    3  4145 15 21  8
                    4  18 2 61 56 14
    
    下面的 ρ 步骤中,P 中 x y 与上表不同的原因,可能是 (x1y1)T=M**(-1)(xy)T
    把 (xy)T 的 M**-1 的这个函数的值--(x+3yx)T赋值给 (x1y1)T 的时候x y 相当于互换了
‘‘‘
P=[[0   36   3  41  18]
   [1   44  10  45   2]
   [62   6  43  15  61]
   [28  55  25  21  56]
   [27  20  39   8  14]]

‘‘‘
   π变换是一个在坐标(x y)上的线性操作,变换如下所示:
   变换π是一个lane上的平移,具体是移动整个道和另一个道(一维位置)的交换即各道互相交换。
   π变换其实就是调换lanes上的各元素位置,以提供长期的扩散效应,若没有这一变换,Keccak-f将展现出周期性的踪迹。
   它在GF(2)上将lanes中原来的位置通过一个2×2的矩阵变换到另一个位置上
   (00)位置不变。π在片上的操作是相互独立的,它也只是一个z轴上的不变体转换

‘‘‘

‘‘‘
   χ变换是Keccak-f中唯一的非线性映射,变换如下所示:
   其中“NOT”表示非运算,“AND“表示与运算
   没有χ变换,Keccak-f轮函数将变成线性。它可以被看成并行应用5w个S盒处理5-bit的各行。
   χ变换在所有方向上均是不变体转换。它的代数阶为2。这对于扩散来说至关重要。
   同时它仅用到了异或,与以及非三个简单的门操作

‘‘‘

‘‘‘
   τ变换
   τ变换很简单,就是加上一个轮常数,目的是为了破坏原有对称性,
   失去它,轮函数将仅在 z 轴方向上时不变体转换,且所有 Keccak-f 的轮变换都将无法抵抗类攻击,如滑块攻击。
   在硬件实现时,变换仅需要一些异或门和生成一些线性移位寄存器即可。
   轮常数为 RC
‘‘‘
RC = [0x0000000000000001 0x0000000000008082 0x800000000000808A 0x8000000080008000 0x000000000000808B
      0x0000000080000001 0x8000000080008081 0x8000000000008009 0x000000000000008A 0x0000000000000088
      0x0000000080008009 0x000000008000000A 0x000000008000808B 0x800000000000008B 0x8000000000008089
      0x8000000000008003 0x8000000000008002 0x8000000000000080 0x000000000000

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3159  2015-09-23 20:44  收集\CompactFIPS202-test.py

     文件       3890  2015-09-23 20:51  收集\CompactFIPS202.py

     文件        694  2018-05-16 13:57  收集\demo_KeccakF.py

     文件       3278  2015-08-11 00:04  收集\demo_TestVectors.py

     文件      14479  2018-05-18 00:07  收集\Keccak.py

     文件       6352  2015-10-15 20:42  收集\ReadMe.txt

     文件     596468  2018-05-16 00:34  收集\sha3\Keccak-implementation-3.1.pdf

     文件    1459683  2018-05-17 00:13  收集\sha3\NIST.FIPS.202.pdf

     文件     197021  2018-05-17 00:28  收集\sha3\SHA3-512_1600.pdf

     文件     197740  2018-05-17 00:28  收集\sha3\SHA3-512_1605.pdf

     文件     197963  2018-05-17 00:28  收集\sha3\SHA3-512_1630.pdf

     文件      74681  2018-05-17 00:28  收集\sha3\SHA3-512_Msg0.pdf

     文件      74781  2018-05-17 00:28  收集\sha3\SHA3-512_Msg30.pdf

     文件      74897  2018-05-17 00:28  收集\sha3\SHA3-512_Msg5.pdf

     文件        322  2018-05-17 18:38  收集\sha3.py

     文件          0  2018-05-16 13:58  收集\__init__.py

     文件      17584  2018-06-06 17:31  sha3.py

     目录          0  2018-06-06 18:47  收集\sha3

     目录          0  2018-06-06 18:49  收集

----------- ---------  ---------- -----  ----

              2922992                    19


评论

共有 条评论