密文和明文怎样转换

密文和明文怎样转换,第1张

include <iostream>

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是散列算法,或称摘要算法,是一种不可逆变换,即变换后无法根据“密文”再还原出明文。

它常被误用作加密算法,在仅仅比较两个密文是否相同,用以证明明文是否相同的场景下还行,但期望还原出明文是不可能的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8569169.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存