SM3加密算法详解(2021-12-8)

原文作者链接:https://zhuanlan.zhihu.com/p/129692191
国密局官方文档:http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml

整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。

SM3概述

SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。具体算法标准原始文本参见参考文献[1]。该算法于2012年发布为密码行业标准(GM/T 0004-2012),2016年发布为国家密码杂凑算法标准(GB/T 32905-2016)。

SM3适用于商用密码应用中的数字签名和验证,是在[SHA-256]基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。消息分组长度为512位,摘要值长度为256位。

整个算法的执行过程可以概括成四个步骤:消息填充、消息扩展、迭代压缩、输出结果。

消息填充

SM3的消息扩展步骤是以512位的数据分组作为输入的。因此,我们需要在一开始就把数据长度填充至512位的倍数。数据填充规则和MD5一样,具体步骤如下:

1、先填充一个“1”,后面加上k个“0”。其中k是满足(n+1+k) mod 512 = 448的最小正整数。

2、追加64位的数据长度(bit为单位,大端序存放1。观察算法标准原文附录A运算示例可以推知。)

image-20211201092756591

消息扩展

SM3的迭代压缩步骤没有直接使用数据分组进行运算,而是使用这个步骤产生的132个消息字。(一个消息字的长度为32位/4个字节/8个16j进制数字)概括来说,先将一个512位数据分组划分为16个消息字,并且作为生成的132个消息字的前16个。再用这16个消息字递推生成剩余的116个消息字

在最终得到的132个消息字中,前68个消息字构成数列 { W j {W_j} Wj},后64个消息字构成数列 { W j ‘ {W_j^`} Wj},其中下标j从0开始计数。

image-20211201093122285

迭代压缩

在上文已经提过,SM3的迭代过程和MD5类似,也是Merkle-Damgard结构。但和MD5不同的是,SM3使用消息扩展得到的消息字进行运算。这个迭代过程可以用这幅图表示:

img

初值IV被放在A、B、C、D、E、F、G、H八个32位变量中,其具体数值参见参考文献[1]。整个算法中最核心、也最复杂的地方就在于压缩函数。压缩函数将这八个变量进行64轮相同的计算,一轮的计算过程如下图所示:

img

image-20211201093627611

图中不同的数据流向用不同颜色的箭头表示。

最后,再将计算完成的A、B、C、D、E、F、G、H和原来的A、B、C、D、E、F、G、H分别进行异或,就是压缩函数的输出。这个输出再作为下一次调用压缩函数时的初值。依次类推,直到用完最后一组132个消息字为止。

输出结果

将得到的A、B、C、D、E、F、G、H八个变量拼接输出,就是SM3算法的输出。

image-20211201093908381


  1. (大端big-endian)数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位。数的高阶字节放在存储。 ↩︎

  • 19
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你使用vim .bashrc打开文件时,发现文件内容为空,可能是因为该文件本身就是空的,或者是因为文件权限问题导致无法读取文件内容。你可以尝试使用ls -l .bashrc命令查看文件权限,或者使用cat .bashrc命令查看文件内容。如果文件确实是空的,你可以手动添加需要的内容,如果是权限问题,你可以使用chmod命令修改文件权限。 ### 回答2: vim .bashrc 是用来编辑 Linux 系统中 .bashrc 文件的命令。在Linux系统中,.bashrc文件是一个用来自定义执行Shell时的环境变量的文件。.bashrc文件通常在用户的主目录下,记录了用户 Shell 环境的一些设置、别名和函数等,所以该文件的内容一般都是非常重要的。 如果我们在使用vim .bashrc命令时打开的是空文件,可能有以下几种可能原因: 1. .bashrc文件本身就是一个空文件。这种情况一般比较少见,因为.bashrc文件通常都有一些基础的环境变量设置和别名,用户也会根据自己需要进行个性化设置。 2. .bashrc文件存在,但是没有读取到。这种情况可能是因为我们使用的是一个新的终端窗口,而终端窗口默认是不会自动读取.bashrc文件的,需要我们手动执行 source .bashrc 命令来让终端窗口读取.bashrc文件。 3. .bashrc文件被误删或者误移动了。在这种情况下,我们使用vim .bashrc命令是无法打开文件的,因为文件已经不存在了。我们需要先找回该文件,或者按照需要重新创建一个.bashrc文件。 4. .bashrc文件权限问题。 .bashrc文件的权限默认应该是用户可读可写,其他用户不可读不可写。如果文件的权限设置不正确,则无法读取和编辑该文件,需要修改权限后才能编辑。 在以上这些情况下,我们都需要先查找可能出现的问题点,然后做出相应的修正。如果是误删除或误移动文件的情况,我们可以从备份文件或者其他渠道找回文件;如果是权限设置问题,则需要使用 chmod 命令修正权限设置;如果是因为新窗口未读取文件,则执行 source .bashrc 命令即可。 ### 回答3: 当我们使用vim编辑器打开.bashrc文件时,有可能会出现文件为空的情况。这可能是由以下几种原因导致的: 1. 文件不存在或者路径错误:当我们输入vim .bashrc命令时,可能会由于文件不存在或者路径错误而导致文件为空。在这种情况下,我们需要检查文件路径是否正确,或者使用ls命令查看当前目录下是否存在.bashrc文件。 2. 文件被清空:有可能是由于误操作或者其他原因,文件内容被清空了。在这种情况下,我们可以使用备份文件将.bashrc文件恢复到之前的状态。可以使用cp命令将备份文件复制到.bashrc文件中。 3. 文件损坏:文件在传输或者保存过程中出现错误可能导致文件损坏,使得文件内容为空。在这种情况下,我们可以使用文件修复工具,如dos2unix或者sed来修复.bashrc文件。 4. 文件权限问题:当我们没有足够的权限去访问.bashrc文件时,可能会导致文件内容为空。可以使用chmod命令更改文件权限,以便我们可以访问并编辑文件。 总之,当我们发现vim .bashrc打开空白时,我们需要仔细检查以上几种可能导致该问题的原因,并采取相应的修复措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值