
using namespace std
#define N 6 //定义N的大小
#define M 5 //定义M的大小,N>=M
void main()
{
char P[N]={0}
char K[M]={0}
char C[M]={0}//因为要用Ki加密,所以C[]只能有M个大
int i,j//定义循环变量
cout <<"请输入明文数组,你可以输入"<<N<<"个字符长度"<<endl
for (i=0i<Ni++)//为P[N]赋值
{
cout <<" P"<<i<<"="
cin >>P[i]
}
cout <<"请输入密钥数组,你可以输入"<<M<<"个字符长度"<<endl
for (j=0j<Mj++)//为K[M]赋值
{
cout <<"K"<<j<<"="
cin >>K[j]
}
for (i=0i<Mi++)//加密!因为K[j]个数有限,只能用M做为循环次数
{
j=i%(M+1)
C[i]=P[i]+K[j]
cout <<P[i]<<endl
cout <<K[j]<<endl
cout <<C[i]<<endl
if (0>C[i])//7F=127
{
//C[cnt]=P[cnt]+K[i%(j+1)]//Ci=Pi+Kj(j=i mod(m+1)) (当Ci<=7FH)
C[i]=C[i]+128
cout <<C[i]<<endl
}
else
{
//C[cnt]=P[cnt]+K[i%(j+1)]-128//Ci=Pi+Kj-80H(j=i mod(m+1)) (当Ci>7FH)
C[i]=C[i]
cout <<C[i]<<endl
}
}
cout<<endl<<endl<<"输出加密后的密文C[i]如下:"<<endl
for (i=0i<=40i++)
cout <<"#"
cout <<endl
for (i=0i<Mi++)//输出加密后的C[i]
{
cout <<C[i]<<endl
}
for (i=0i<=40i++)
cout <<"#"
cout <<endl
for (i=0i<Mi++)//解密!因为K[j]个数有限,只能用M做为循环次数
{
j=i%(M+1)
if (C[i]<=K[j])
{
P[i]=C[i]-K[j]+128//Pi=Ci-Kj (j=i mod(m+1)) (当Ci>=Kj)
}
else
{
P[i]=C[i]-K[j]//80H=128,Pi=Ci-Kj+80H(j=i mod(m+1))(当Ci<Kj)
}
}
cout<<endl<<endl<<"输出解密后的明文P[i]如下:"<<endl
for (i=0i<=36i++)
cout <<"#"
cout <<endl
for (i=0i<Ni++)//输出解密后的P[i]
{
cout <<P[i]<<endl
}
for (i=0i<=36i++)
cout <<"#"
cout <<endl<<endl
调了半天,楼主真是太粗心了!middle1[]应该这样声明:char middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}
最后输出start的时候要注意控制长度,改个for循环就好了!
#include<stdio.h>
#include<string.h>
int main(void)
{
int i,j,length,n
char temp
char middle2[27]
char start[201],finish[201]
char middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}
gets(middle2)
gets(finish)
scanf("%d",&n)
length=strlen(finish)
for(i=0i<25i++)
{
for(j=i+1j<26j++)
{
if(middle2[i]>middle2[j])
{
temp=middle2[i]
middle2[i]=middle2[j]
middle2[j]=temp
temp=middle1[i]
middle1[i]=middle1[j]
middle1[j]=temp
}
}
}
for(i=1i<=ni++)
{
for(j=0j<lengthj++)
{
if(finish[j]==' ')
{
start[j]=' '
}
else
{
start[j]=middle1[finish[j]-'A']
}
}
}
for( i = 0i <length++i)
printf("%c",start[i])
printf("\n")
return 0
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/
MD5是散列算法,或称摘要算法,是一种不可逆变换,即变换后无法根据“密文”再还原出明文。它常被误用作加密算法,在仅仅比较两个密文是否相同,用以证明明文是否相同的场景下还行,但期望还原出明文是不可能的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)