第1关:移位密码
任务描述
移位加密是密码学中一种非常经典、也是很重要的加密方法,学好移位加密对后面其他加密方法的学习有着至关重要的作用。
本关任务:使用 c++ 实现移位密码方法,然后对输入的明文字符串进行移位加密后打印输出。
相关知识
为了完成本关任务,你需要掌握:1.数论中的模运算;2.定义模 m 上的运算;3.移位密码体制。
模运算
假设a和b均为整数,m是一正整数。若m整除b−a,则可将其表示为:
a≡b(mod m)
该式读作“a与b模m同余”,正整数m称为模数。
下面给出计算一组数据中符合指定模数的同余的数字对,具体 C++ 代码示例如下:
constexpr int mod=9; // 模数 mod 取值为9
int a[10]= {2,11,12};
for(size_t i=1; i<3; i++) // 循环遍历数组 a 中所有的数字对
if((a[i]-a[i-1])%mod==0) // 判断mod是否可以整除两数之差
cout<<a[i-1]<<"与"<<a[i]<<"模"<<mod<<"同余"<<endl;
输出:2与11模9同余
上述代码通过遍历数组 a 中的所有数字对,判断模数能否整除数字对中两数之差,从而找出符合条件的数字对。
模上的运算
通俗的理解,模 m 上的运算就是:在模 m 的集合上定义加法和乘法,下面给出具体定义。
令Zm表示集合