S-DES子密钥产生
2016-05-03 19:26
309 查看
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; void P10_(int K[],int P10[],int K0[]) { for(int i=1;i<=10;i++) K0[i]=K[P10[i]]; } void P8_(int K[],int P8[],int K0[]) { for(int i=1;i<=8;i++) K0[i]=K[P8[i]]; } void LS_1(int K0[],int l,int r) { int temp=K0[l]; for(int i=l;i<r;i++) K0[i]=K0[i+1]; K0[r]=temp; } void LS_2(int K0[],int l,int r) { int t1=K0[l],t2=K0[l+1]; for(int i=l;i<r-1;i++) K0[i]=K0[i+2]; K0[r-1]=t1; K0[r]=t2; } int main() { int K[11],P10[11],P8[11],K1[11],K2[11],K0[11]; while(1) { cout<<"输入P10"<<endl; for(int i=1;i<=10;i++) cin>>P10[i]; cout<<"输入P8"<<endl; for(int i=1;i<=8;i++) cin>>P8[i]; cout<<"输入主密钥"<<endl; char str[11]; cin>>str; for(int i=0;i<strlen(str);i++) K[i+1]=str[i]-'0'; P10_(K,P10,K0); LS_1(K0,1,5); LS_1(K0,6,10); P8_(K0,P8,K1); LS_2(K0,1,5); LS_2(K0,6,10); P8_(K0,P8,K2); cout<<"K1"<<endl; for(int i=1;i<=8;i++) cout<<K1[i]; cout<<endl; cout<<"K2"<<endl; for(int i=1;i<=8;i++) cout<<K2[i]; cout<<endl; cout<<endl<<endl<<endl; } return 0; }
相关文章推荐
- GDOI2016再次滚粗记
- Java 类中各成分加载顺序 和 内存中的存放位置
- Git远程操作详解
- untiy 3d ShaderLab_第6章_VertexLit渲染路径_2_顶点照明和Unity存放光源的第一种方式
- Android逆向
- iOS xib创建UIScrollView不滑动问题解决
- NFS脚本搭建
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- Java前辈:学习J2EE流程中的经验和教训
- Android Studio快捷键汇总
- 多线程并发库高级应用 之 java5中的线程并发库--线程锁技术
- 期中集群架构---思想篇
- linux修改中文乱码
- Spark Streaming介绍与基本执行过程
- [Java]二叉树简要解析(持续学习和整理)
- js和jquery修改背景颜色的区别
- 作业7:用户体验设计案例分析
- GDOI2016总结
- 【HUSTOJ】1016: 最大值
- Realm的model终于可以不继承RealmObject了