密码学置换群相关的运算及实现Word下载.docx
《密码学置换群相关的运算及实现Word下载.docx》由会员分享,可在线阅读,更多相关《密码学置换群相关的运算及实现Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
理解密码学相关基本概念
理解并能够编写基本的古典密码体制
熟练应用C++编程实现密码体制
二、实验内容
1、求S3的所有元素并输出所有的置换。
2、水域S3的任意两个置换元素,求他们的复合运算的结果。
3、给定S3的某个置换,求它的逆置换。
三、实验原理
1.置换群:
n元对称群的任意一个子群,都叫做一个n元置换群
2.矩阵的复合运算
3.矩阵的求逆运算
四、实验步骤(包括流程图、功能模块)
1.申请18个空间,将3个元素依次循环填入填充。
2.通过置换,求得所有置换群
3.矩阵的复合运算
4.矩阵的求逆运算
【算法流程图】
五、软件使用说明(开发环境、参数使用详细说明、实验结果+相应截图等)
【功能模块】
求取置换群
for(inti=0;
i<
3;
i++)
{
swap(Abelian[i*6],Abelian[i*6+i]);
swap(Abelian[i*6+3],Abelian[i*6+3+i]);
swap(Abelian[i*6+4],Abelian[i*6+4+1]);
}
矩阵的复合
for(inti=0;
i++)
for(intj=0;
j<
j++)
if(Abelian[3*(m-1)+i]==Abelian_Group_src[j])
Compound_Operate[i]=Abelian[3*(n-1)+j];
}
逆矩阵
{
for(intj=0;
if(Abelian[3*(n-1)+i]==Abelian_Group_src[j])
inverse_operation[j]=Abelian_Group_src[i];
【开发环境】
VisualStudio2013(Windows10)
【参数使用】
输入的三个元素:
4、5、6
选择做复合运算的两个置换:
4、5
求逆的矩阵编号:
4
【实验结果】
六、参考资料(书籍或网络文章)
《密码编码学与网络安全——原理与实践(第五版)》
七、实验心得和总结
八、源代码
#include<
iostream>
string.h>
usingnamespacestd;
intmain()
//1
int*Abelian_Group_src=newint[3];
cout<
<
"
请依次输入元素值:
"
;
cin>
>
Abelian_Group_src[i];
intAbelian[18];
18;
i=i+3)//因为每个置换群的第一行都相同,所以只需要对剩下的一行操作即可。
3的阶层是6,一共有六个置换群,去掉第一行,一共有6x3个数,每一组默认值按照输入的顺序赋值,并放在同一个数组中
Abelian[i]=Abelian_Group_src[0];
Abelian[i+1]=Abelian_Group_src[1];
Abelian[i+2]=Abelian_Group_src[2];
i++)//置换操作,18个数分为3组,每一组中的两个小组的第一个数分别于组数对应的数字交换,然后交换每一组最后两个数字
S3的所有置换:
<
endl;
i=i+3)
cout<
置换"
i/3+1<
:
Abelian_Group_src[0]<
Abelian_Group_src[1]<
Abelian_Group_src[2]<
Abelian[i]<
Abelian[i+1]<
Abelian[i+2]<
//2
intm,n;
请输入需要做复合运算的两个元素,即在上面的置换中任选2个(输入数字1~6):
cin>
n>
m;
while(n<
1||n>
6||m<
1||m>
6)
输入错误,请重新输入!
请输入需要作复合运算的两个元素,即在上面的置换中任选2个(输入数字1~6):
intCompound_Operate[3];
//if(Abelian[3*(m-1)+i]==Abelian_Group_src[0])
//Compound_Operate[i]=Abelian[3*(n-1)];
//if(Abelian[3*(m-1)+i]==Abelian_Group_src[1])
//Compound_Operate[i]=Abelian[3*(n-1)+1];
//if(Abelian[3*(m-1)+i]==Abelian_Group_src[2])
//Compound_Operate[i]=Abelian[3*(n-1)+2];
。
="
Abelian[3*(n-1)]<
Abelian[3*(n-1)+1]<
Abelian[3*(n-1)+2]<
Abelian[3*(m-1)]<
Abelian[3*(m-1)+1]<
Abelian[3*(m-1)+2]<
Compound_Operate[0]<
Compound_Operate[1]<
Compound_Operate[2]<
//3
intinverse_operation[3];
请输入需要求逆的矩阵编号,即在上面的置换编号(输入数字1~6):
n;
if(Abelian[3*(n-1)+i]==Abelian_Group_src[j])
inverse_operation[j]=Abelian_Group_src[i];
的逆置换为:
inverse_operation[0]<
inverse_operation[1]<
inverse_operation[2]<
system("
pause"
);
return0;
WelcomeTo
Download!
!
欢迎您的下载,资料仅供参考!