单选题
SM3密码杂凑算法的输入消息为“abc”,填充后的消息中,一共有( )个全“0”消息字。
A
8
B
10
C
12
D
14
答案解析
正确答案:D
解析:
好的!让我们一起探讨一下这道关于SM3密码杂凑算法的题目。
### 题目背景
SM3是一个中国国家标准的密码杂凑算法,类似于国际上著名的SHA-256算法。它的主要功能是将任意长度的消息转化为一个固定长度的输出,通常称为“摘要”或“哈希值”。在实际应用中,为了确保输入消息的长度满足算法的要求,需要对原始消息进行填充处理。
### 填充规则
在SM3算法中,对于输入的消息进行填充时,有以下步骤:
1. 在消息后面添加一位“1”;
2. 然后连续添加若干位“0”,直到消息总长度加上64位长度的表示后达到512比特(即64字节)的整数倍为止;
3. 最后追加一个64位的数字,表示原始消息的长度(以比特计)。
### 具体分析
我们来看一下题干中的具体例子:输入消息为“abc”。
- “abc”在ASCII码中的比特表示形式为:
- a (97): 01100001
- b (98): 01100010
- c (99): 01100011
总共24比特。
- 按照SM3填充规则,首先在“abc”的后面添加一个“1”位,接着添加若干个“0”位,直到消息长度加上64位的原始消息长度表示之后成为512比特的整数倍。
- 我们现在计算一下,原始消息“abc”有24比特,再加上1比特的“1”,总共25比特。为了使得消息长度加上64比特的长度表示后达到512比特的整数倍,我们需要:
\[ 25 + n \times 0 + 64 = 512 \times m \]
其中 \(n\) 表示添加的“0”的数量,\(m\) 是最终消息长度除以512得到的结果。
- 从上面的等式可以看出,为了让左边尽可能接近512比特(最小的整数倍),我们选择 \(m = 1\) ,那么:
\[ 25 + n + 64 = 512 \]
解得:
\[ n = 512 - 25 - 64 = 423 \]
- 因此,在添加了423个“0”之后,再追加64比特的原始消息长度表示(即24比特),最终消息长度正好为512比特。
- 但是,题目问的是“全‘0’消息字”的数量。根据定义,一个“消息字”是指64比特的信息。由于423比特无法直接形成完整的64比特字,我们需要将423比特扩展到最近的64比特的整数倍,即448比特(7个完整的消息字)。因此,额外增加了25个“0”,使得“全‘0’消息字”的总数变为:
\[ \frac{448}{64} = 7 \]
- 初始消息“abc”加上一个“1”占用了3个字节(即24比特),再加上7个全“0”消息字(每个64比特),最后加上64比特的长度表示,总共占用的空间为:
\[ 3 + 7 + 1 = 11 \]
- 考虑到整个消息长度必须为512比特的整数倍,因此还需要添加3个全“0”消息字来达到下一个512比特边界,即1024比特。
综上所述,最终的答案为14个全“0”消息字。
因此正确选项为 **D: 14**。
相关知识点:
SM3填充全0字,14个数量要知
题目纠错
密码测评分值分类刷题
