本文主要是介绍对于二元加法序列密码,已知输入序列M为0x23456789,密钥序列Z为0x87654321,求输出序列C。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题解:
1.分析:
加密:依次把明文序列与密钥序列中的对应项做异或,也叫二元加法运算
解密:密钥序列与密文序列中的对应项做二元加法运算(异或)
2.操作
(1)输入序列化为二进制
输入序列 | 转为二进制 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
8 | 1000 |
9 | 1001 |
tips(十进制化二进制小技巧):
二进制每一位数从右到左,代表十进制从小到大:1、2、4、8、16……
我们假设转换的十进制数为X,在其中选择最大能减的数(减完>=0),减去,在所选数代表的位数内容变1,如此重复,直到X剩余数值为0
举例:
x=9,最大能减的二进制数是8,减去,第四位数内容变1(1000),现x=1,最大能减的二进制数是1,减去,第一位数内容变1(1001),现x=0,结束
这里是0x是16进制,就先把16进制转10进制就行
(2)密钥序列化为二进制
密钥序列 | 转为二进制 |
8 | 1000 |
7 | 0111 |
6 | 0110 |
5 | 0101 |
4 | 0100 |
3 | 0011 |
2 | 0010 |
1 | 0001 |
(3)求输出序列C
这里我们用到加密操作:明文序列与密钥序列中的对应项做异或
异或运算的基本规则:
- 同值取0,异值取1:即如果两个二进制位相同,则异或结果为0;如果两个二进制位不同,则异或结果为1。例如,0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
计算结果:
输入序列 | 密钥序列 | 异或结果 | 化为十进制 |
0010 | 1000 | 1010 | A |
0011 | 0111 | 0100 | 4 |
0100 | 0110 | 0010 | 2 |
0101 | 0101 | 0000 | 0 |
0110 | 0100 | 0010 | 2 |
0111 | 0011 | 0100 | 4 |
1000 | 0010 | 1010 | A |
1001 | 0001 | 1000 | 8 |
C=0xA42024A8
tips(二进制化十进制小技巧):
二进制每一位数从右到左,代表十进制从小到大:1、2、4、8、16……
将数值对应位数下二进制内容为1的数值相加,和即十进制,这里是0x是16进制,就先把10进制转16进制就行
举例:
1011
= 1x8+0x4+1x2+1x1
=8+2+1
=11
这篇关于对于二元加法序列密码,已知输入序列M为0x23456789,密钥序列Z为0x87654321,求输出序列C。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!