排列码n4源程序文件实现语言C++.docx

上传人:b****6 文档编号:8251164 上传时间:2023-01-30 格式:DOCX 页数:22 大小:18.68KB
下载 相关 举报
排列码n4源程序文件实现语言C++.docx_第1页
第1页 / 共22页
排列码n4源程序文件实现语言C++.docx_第2页
第2页 / 共22页
排列码n4源程序文件实现语言C++.docx_第3页
第3页 / 共22页
排列码n4源程序文件实现语言C++.docx_第4页
第4页 / 共22页
排列码n4源程序文件实现语言C++.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

排列码n4源程序文件实现语言C++.docx

《排列码n4源程序文件实现语言C++.docx》由会员分享,可在线阅读,更多相关《排列码n4源程序文件实现语言C++.docx(22页珍藏版)》请在冰豆网上搜索。

排列码n4源程序文件实现语言C++.docx

排列码n4源程序文件实现语言C++

排列码加密解密方法及其加密解密器具有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:

Definestheentrypointfortheconsoleapplication.

//

//c++实现的排列码源程序

//在visualstudio2008中实现

#include"stdafx.h"

#include

#include

usingnamespacestd;

//函数声明

charrhl(char);//循环右移函数

intreverse(int);//按位取反函数

voidencode();//加密函数

voiddecode();//解密函数

inta[8],c[8],d[16],e[8],f[4],t[32],p[32],w[32],remainder,q;

charbite0,bite1,bite4,bite5;

unsignedcharkey0[4],key1[4],key[4],r;

//主函数

intmain()

{

charfile_name1[200],file_name2[200],file_name3[200],file_name4[200];

inti,j,k,choose,zijie2=0,zijie3=0,a1=0,a2=0,a3=0,a4=0;

while(true){

//输出提示信息

cout<<"--------请选择您要的操作:

---------"<

cout<<"加密文件请按键;"<

cout<<"解密文件请按键;"<

cout<<"打算退出请按键。

"<

cout<<"----------------------------------";

cout<<"\n";

//cin>>choose;

choose=1;

//加密过程

if(choose==1)

{

cout<<"输入要加密的文件名称及其路径:

"<

cout<<"";

cin>>file_name1;

cout<<"加密后要保存的文件名称及其路径:

"<

cout<<"";

cin>>file_name2;

ifstreamfs0(file_name1,ios:

:

binary);

if(!

fs0)

{

cout<<"文件打开失败!

"<

return1;

}

ofstreamfs1(file_name2,ios:

:

binary);

if(!

fs1)

{

cout<<"文件打开失败!

"<

return1;

}

cout<<"输入您的位密钥"<

cin>>key0;

r=key0[0];

key0[0]=key0[3];

key0[3]=r;

r=key0[1];

key0[1]=key0[2];

key0[2]=r;

while(fs0.get(bite0))

{

unsignedchargg;

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]%24;//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;}

elseif(p[j]==1&&w[j]==1&&q==0){w[j]=0;q=1;}

elseif(p[j]==0&&w[j]==0){w[j]=q;q=0;}

elseif(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<<"";

cin>>file_name3;

cout<<"解密后要保存的文件名称及其路径:

"<

cout<<"";

cin>>file_name4;

ifstreamfs2(file_name3,ios:

:

binary);

if(!

fs2)

{

cout<<"文件打开失败!

"<

return1;

}

ofstreamfs3(file_name4,ios:

:

binary);

if(!

fs3)

{

cout<<"文件打开失败!

"<

return1;

}

cout<<"输入您的位解密密钥(与加密密钥相同):

"<

cout<<"";

cin>>key0;

r=key0[0];

key0[0]=key0[3];

key0[3]=r;

r=key0[1];

key0[1]=key0[2];

key0[2]=r;

//cout<<"======================================"<

while(fs2.get(bite1))

{

chargg;

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]%24;

//看哪一路径需要取反,前八条路径

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;

}//密钥n位求非n位不求非

for(j=0;j<28;j++){

w[31-j]=w[27-j];

}

for(j=0;j<4;j++)

w[j]=f[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;}

elseif(p[j]==1&&w[j]==1&&q==0){w[j]=0;q=1;}

elseif(p[j]==0&&w[j]==0){w[j]=q;q=0;}

elseif(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]=f[j];

for(j=0;j<4;j++)

a[j]=e[j];

for(j=7;j>=0;j--)

{

zijie3=zijie3<<1;

zijie3=zijie3|a[j];

}

bite5=char(zijie3);

fs3.put(bite5);

}

fs2.close();

fs3.close();

}

 

if(choose==3)

cout<<"结束!

"<

cout<<"-----------------------------------"<

//return0;

}

}

//取反函数

intreverse(intx)

{

x=~x;

x=x&1;

returnx;

}

 

charrhl(charcc)

{

unsignedchara,b;

a=cc<<7;

b=cc>>1;

cc=a|b;

returncc;

}

//加密函数中使用的排列码表

voidencode()

{

switch(remainder)

{

case0:

//3201

a[0]=c[2];if(d[8]==1)a[0]=reverse(a[0]);

a[1]=c[3];if(d[13]==1)a[1]=reverse(a[1]);

a[2]=c[1];if(d[6]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case1:

//3210

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[2];if(d[9]==1)a[1]=reverse(a[1]);

a[2]=c[1];if(d[6]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case2:

//3120

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[1];if(d[5]==1)a[1]=reverse(a[1]);

a[2]=c[2];if(d[10]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case3:

//3102

a[0]=c[2];if(d[8]==1)a[0]=reverse(a[0]);

a[1]=c[1];if(d[5]==1)a[1]=reverse(a[1]);

a[2]=c[3];if(d[14]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case5:

//3021

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[3];if(d[13]==1)a[1]=reverse(a[1]);

a[2]=c[2];if(d[10]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case4:

//3012

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[2];if(d[9]==1)a[1]=reverse(a[1]);

a[2]=c[3];if(d[14]==1)a[2]=reverse(a[2]);

a[3]=c[0];if(d[3]==1)a[3]=reverse(a[3]);

break;

case6:

//2310

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[2];if(d[9]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[1];if(d[7]==1)a[3]=reverse(a[3]);

break;

case7:

//2301

a[0]=c[2];if(d[8]==1)a[0]=reverse(a[0]);

a[1]=c[3];if(d[13]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[1];if(d[7]==1)a[3]=reverse(a[3]);

break;

case8:

//2130

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[1];if(d[5]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[2];if(d[11]==1)a[3]=reverse(a[3]);

break;

case9:

//2103

a[0]=c[2];if(d[8]==1)a[0]=reverse(a[0]);

a[1]=c[1];if(d[5]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[3];if(d[15]==1)a[3]=reverse(a[3]);

break;

case10:

//2031

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[3];if(d[13]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[2];if(d[11]==1)a[3]=reverse(a[3]);

break;

case11:

//2013

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[2];if(d[9]==1)a[1]=reverse(a[1]);

a[2]=c[0];if(d[2]==1)a[2]=reverse(a[2]);

a[3]=c[3];if(d[15]==1)a[3]=reverse(a[3]);

break;

case12:

//1320

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[0];if(d[1]==1)a[1]=reverse(a[1]);

a[2]=c[2];if(d[10]==1)a[2]=reverse(a[2]);

a[3]=c[1];if(d[7]==1)a[3]=reverse(a[3]);

break;

case13:

//1302

a[0]=c[2];if(d[8]==1)a[0]=reverse(a[0]);

a[1]=c[0];if(d[1]==1)a[1]=reverse(a[1]);

a[2]=c[3];if(d[14]==1)a[2]=reverse(a[2]);

a[3]=c[1];if(d[7]==1)a[3]=reverse(a[3]);

break;

case14:

//1230

a[0]=c[3];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[0];if(d[1]==1)a[1]=reverse(a[1]);

a[2]=c[1];if(d[6]==1)a[2]=reverse(a[2]);

a[3]=c[2];if(d[11]==1)a[3]=reverse(a[3]);

break;

case15:

//1203

a[0]=c[2];if(d[12]==1)a[0]=reverse(a[0]);

a[1]=c[0];if(d[9]==1)a[1]=reverse(a[1]);

a[2]=c[1];if(d[6]==1)a[2]=reverse(a[2]);

a[3]=c[3];if(d[3]==1)a[3]=reverse(a[3]);

break;

case16:

//1032

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[0];if(d[1]==1)a[1]=reverse(a[1]);

a[2]=c[3];if(d[14]==1)a[2]=reverse(a[2]);

a[3]=c[2];if(d[11]==1)a[3]=reverse(a[3]);

break;

case17:

//1023

a[0]=c[1];if(d[4]==1)a[0]=reverse(a[0]);

a[1]=c[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1