信息安全

1、仿射密码

#include <stdio.h> 
#include <string.h>
char p[100];
int gcd(int x,int y)
{
   
    int t;
    while(y)
    {
   
        t=x%y;
        x=y;
        y=t;
    }
    return  x;
}
void code(char m1[],int k1,int k2,int n){
   
	int i;
	for(i=0;i<n;i++){
   
		if(m1[i]>='A'&&m1[i]<='Z'){
   
			p[i]=(k1*(m1[i]-'A')+k2)%26+'A';
		}
		else if(m1[i]>='a'&&m1[i]<='z'){
   
			p[i]=(k1*(m1[i]-'a')+k2)%26+'a';
		}
		else{
   	
		p[i]=m1[i];	
		}		
	}
	p[i]='\0';
	printf("加密后的密文是:\n%s\n",p);
}
void decode(char c[],int k1,int k2,int n){
   
	int i; 
	int j=1;
	int s;
	s=(j*k1)%26;
	while(s!=1){
   
		j++;
		s=(j*k1)%26;
	}
	for(i=0;i<n;i++){
   
		if(c[i]>='A'&&c[i]<='Z'){
   
			p[i]=(j*(c[i]-'A'-k2+26))%26+'A';
		}
		else if(c[i]>='a'&&c[i]<='z'){
   
			p[i]=(j*(c[i]-'a'-k2+26))%26+'a';			
		}
		else{
   	
		p[i]=c[i];	
		}		
	}
	p[i]='\0';
	    printf("解密后的明文是:\n%s\n",p);
} 
int main(){
   
    int k1,k2,n;
    printf("请输入明文:\n"); 
    gets(p);
    printf("请输入密钥k1(与26互素):\n");
    scanf("%d",&k1);
    while(gcd(k1,26)!=1){
   
    	printf("密钥输入非法,请输入密钥k1(与26互素):\n");
        scanf("%d",&k1);
	}  
    printf("请输入密钥k2:\n");
    scanf("%d",&k2);
    n=strlen(p);
    code(p,k1,k2,n);
    decode(p,k1,k2,n);
	return 0;
}

2、移位密码

#include <stdio.h>
#include <string.h>
char p[100];
void code(char *m1,int k,int n){
   
	int i;
	if(k>26){
   
		k=k%26;
	}
	for(i=0;i<n;i++){
   
		if(m1[i]>='A'&&m1[i]<='Z'){
   
			p[i]=(m1[i]-'A'+k+26)%26+'A';
		}
		else if(m1[i]>='a'&&m1[i]<='z'){
   
			p[i]=(m1[i]-'a'+k+26)%26+'a';
		}
		else{
   	
		p[i]=m1[i];	
		}		
	}
	p[i]='\0';
	printf("加密后的密文是:\n%s\n",p);
}
void decode(char *c,int k,int n){
   
	int i;
	if(k>26){
   
		k=k%26;
	}
	for(i=0;i<n;i++){
   
		if(c[i]>='A'&&c[i]<='Z'){
   
			p[i]=((c[i]-'A')-k+26)%26+'A';
		}
		else if(c[i]>='a'&&c[i]<='z'){
   
			p[i]=((c[i]-'a')-k+26)%26+'a';
		}
		else{
   	
		p[i]=c[i];	
		}		
	}
	p[i]='\0';
	printf("解密后的明文是:\n%s\n",p);
}

int main() {
   
    int k,n;
    printf("请输入明文:\n"); 
    gets(p);
    printf("请输入密钥:\n");
    scanf("%d",&k);
    n=strlen(p);
    code(p,k,n);
    decode(p,k,n);
	return 0;
}