排列码加密解密方法及其加密解密器具有5大特征:
1.加密强度极高 比世界最先进的AES高出10的5千多次方倍
2.加密速度极快 仅几级门电路的延迟,7.5ns内完成1个分组的加密 3.设备量极少 比51单片机更简单 4.算法极多 有(n!)!个
5.使用灵活 分组长度可以是任意整数
●可用于制作CDMA加密手机 一只西门子的GSM加密手机售价高达3000美圆,我们制作比他技术指标更高的CDMA加密手机,只需增加开发成本,生产成本并不增加多少。目前,我国部队不允许使用手机,就是因为没有加密强度高的加密手机。我们已有可以监控或不可以监控不能窃听的加密手机方案。
●同样可以制作具有加密功能的有线电话和无绳电话、步谈机、传真机。
●可以制作既防外部黑客又防外部病毒攻击的国际互联内部网。目前信息共享已解决很好,但信息私有没有很好的解决方案。我们极多的算法,提供了解决这一方案的可行性。
排列码运算用的除法器
《一种快速除法器》 已经公开 专利申请号:03144205.6
《 第二种除数是15×2^n的快速除法器》 专利申请号:200310107543.5 还有申请国际专利的机会
除法器的共有特征是:利用特殊运算实现运算速度特别快,而设备量又特别小。在要求运算速度特别快的特殊场合有不可替代的作用。
// hHHH.cpp : Defines the entry point for the console application. //
//c++实现的排列码源程序
//在visual studio 2008中实现
#include \#include
//函数声明
char rhl(char);//循环右移函数
int reverse(int); //按位取反函数 void encode(); //加密函数 void decode(); //解密函数
int a[8],c[8],d[16],e[8],f[4],t[32],p[32],w[32],remainder,q; char bite0,bite1,bite4,bite5;
unsigned char key0[4],key1[4],key[4],r;
//主函数 int main() {
char file_name1[200],file_name2[200],file_name3[200],file_name4[200]; int i,j,k,choose,zijie2=0,zijie3=0,a1=0,a2=0,a3=0,a4=0; while(true){ //输出提示信息
cout<<\请选择您要的操作:---------\< cout<<\解密文件请按键;\< cout<<\; cout<<\; //cin>>choose; choose=1; //加密过程 if(choose== 1) { cout<<\输入要加密的文件名称及其路径:\< cout<<\加密后要保存的文件名称及其路径:\< ifstream fs0(file_name1,ios::binary); if(!fs0) { cout<<\文件打开失败!\< ofstream fs1(file_name2,ios::binary); if(!fs1) { cout<<\文件打开失败!\< cout<<\输入您的位密钥\< key0[0]=key0[3]; key0[3]=r; r=key0[1]; key0[1]=key0[2]; key0[2]=r; while(fs0.get(bite0)) { unsigned char gg; for(i=0;i<8;i++) { c[i]=bite0&1;//c[i]存明文 bite0=bite0>>1; } for(k=0;k<4;k++) key[k]=key0[k];//用于保存密钥 //模取余 remainder=key[2]$;//key0[2]用于选行 //看哪一路径需要取反,前八条路径 gg=key[0]; for(j=0;j<8;j++) { d[j]=gg&1; gg=gg>>1; } //后八条路径 gg=key[1]; for(j=8;j<16;j++) { d[j]=gg&1; gg=gg>>1; } encode();//低四位加密 //以下是密钥的变化 for(j=0;j<8;j++){ w[j]=key[0]&1; key[0]=key[0]>>1; w[j+8]=key[1]&1; key[1]=key[1]>>1; w[j+16]=key[2]&1; key[2]=key[2]>>1; w[j+24]=key[3]&1; key[3]=key[3]>>1; } for(j=0;j<4;j++){ w[j]=w[j]^1; w[j+8]=w[j+8]^1; w[j+16]=w[j+16]^1; w[j+24]=w[j+24]^1; }//密钥n位求非n位不求非 for(j=0;j<28;j++){ w[31-j]=w[27-j]; } for(j=0;j<4;j++) w[j]=c[j]; for(j=0;j<8;j++){ p[j]=key0[0]&1; key0[0]=rhl(key0[0]); p[j+8]=key0[1]&1; key0[1]=rhl(key0[1]); p[j+16]=key0[2]&1; key0[2]=rhl(key0[2]); p[j+24]=key0[3]&1; key0[3]=rhl(key0[3]); } q=1; for(j=0;j<32;j++){ if(p[j]==1&&w[j]==1&&q==1){w[j]=1;q=1;} else if(p[j]==1&&w[j]==1&&q==0){w[j]=0;q=1;} else if(p[j]==0&&w[j]==0){w[j]=q;q=0;} else if(w[j]!=p[j]&&q==1){w[j]=0;q=1;} else{w[j]=1;q=0;} } for(j=0;j<8;j++){ t[7-j]=w[31-j]; } for(j=0;j<24;j++){ w[31-j]=w[23-j]; } for(j=0;j<8;j++) w[7-j]=t[7-j]; a1=a2=a3=a4=0; for(j=7;j>=0;j--){ a1=a1<<1; a1=a1|w[j]; a2=a2<<1; a2=a2|w[j+8]; a3=a3<<1; a3=a3|w[j+16]; a4=a4<<1; a4=a4|w[j+24]; } key0[0]=a1;key0[1]=a2;key0[2]=a3;key0[3]=a4; for(j=0;j<4;j++) e[j]=a[j];//a[i]存中间加密结果,e[i]存密文 for(j=0;j<4;j++) c[j]=e[j]; for(j=7;j>=0;j--) { zijie2=zijie2<<1; zijie2=zijie2|c[j]; } bite4=char(zijie2); fs1.put(bite4); } fs0.close(); fs1.close(); //cout<<\ } //解密过程 if (choose==2) { cout<<\输入要解密的文件名称及其路径:\< cout<<\解密后要保存的文件名称及其路径:\< ifstream fs2(file_name3,ios::binary); if(!fs2) { cout<<\文件打开失败!\< ofstream fs3(file_name4,ios::binary); if(!fs3) { cout<<\文件打开失败!\< cout<<\输入您的位解密密钥(与加密密钥相同):\< key0[0]=key0[3]; key0[3]=r; r=key0[1]; key0[1]=key0[2]; key0[2]=r; //cout<<\ while(fs2.get(bite1)) { char gg; for(i=0;i<8;i++) { a[i]=bite1&1; bite1=bite1>>1; } for(k=0;k<4;k++) key[k]=key0[k];//用于保存密钥 //模取余 remainder=key[2]$; //看哪一路径需要取反,前八条路径 gg=key[0]; for(j=0;j<8;j++) { d[j]=gg&1; gg=gg>>1; } //后八条路径 gg=key[1]; for(j=8;j<16;j++) { d[j]=gg&1; gg=gg>>1; } decode(); //以下是密钥的变化 for(j=0;j<8;j++){ w[j]=key[0]&1; key[0]=key[0]>>1; w[j+8]=key[1]&1; key[1]=key[1]>>1; w[j+16]=key[2]&1; key[2]=key[2]>>1; w[j+24]=key[3]&1; key[3]=key[3]>>1; } for(j=0;j<4;j++){ w[j]=w[j]^1; w[j+8]=w[j+8]^1; w[j+16]=w[j+16]^1; w[j+24]=w[j+24]^1;