C语言双重置换加密

来源:互联网 发布:曲靖医专网络管理系统 编辑:程序博客网 时间:2024/06/11 10:20

密钥:置换规则:(1,2,3,4,5,6,7,8)->(2,3,4,5,6,7,8,1)进行行置换,(1,2,3,4,5,6,7,8)->(3,4,5,6,7,8,1,2)进行列置换。

#include <stdio.h>#include <string.h>int main(){                  char yw[3][50] = {"大风起兮云飞扬,",    "威加海内兮归故乡,",    "安得猛士兮守四方?"} ;    printf("原文是:%s%s%s\n",yw[0],yw[1],yw[2]);    char zh1,zh2,zh3,zh4;    for(int j = 0; j < 3; j++){    zh1 = yw[j][0];    zh2 = yw[j][1];    for(int i = 0; i < strlen(yw[j]); i++){        if(i < strlen(yw[j]) - 2){        yw[j][i] = yw[j][i+2] ;        }    if(i == strlen(yw[j]) - 1){        yw[j][i] = zh2;    }    if(i == strlen(yw[j]) - 2){        yw[j][i] = zh1;     }             }    }    printf("第一次重置后是:%s%s%s\n",yw[0],yw[1],yw[2]);    /***************************************/    for(int j = 0; j < 3; j++){    zh1 = yw[j][0];    zh2 = yw[j][1];    zh3 = yw[j][2];    zh4 = yw[j][3];    for(int i = 0; i < strlen(yw[j]); i++){        if(i < strlen(yw[j]) - 4){        yw[j][i] = yw[j][i+4] ;        }    if(i == strlen(yw[j]) - 1){        yw[j][i] = zh2;    }    if(i == strlen(yw[j]) - 2){        yw[j][i] = zh1;     }        if(i == strlen(yw[j]) - 3){        yw[j][i] = zh4;    }    if(i == strlen(yw[j]) - 4){        yw[j][i] = zh3;     }}    }    printf("第二次重置后是:%s%s%s\n",yw[0],yw[1],yw[2]);    /***************************************/    for(int j = 0; j < 3; j++){    zh1 = yw[j][strlen(yw[j]) - 1];    zh2 = yw[j][strlen(yw[j])- 2];    zh3 = yw[j][strlen(yw[j]) - 3];    zh4 = yw[j][strlen(yw[j])- 4];    for(int i = strlen(yw[j]) - 1 ;i >= 0; i--){        if(i > 3){                yw[j][i] = yw[j][i-4] ;        }    if(i ==  1){        yw[j][i] = zh1;    }    if(i == 0){        yw[j][i] = zh2;     }if(i ==  2){        yw[j][i] = zh4;    }    if(i == 3){        yw[j][i] = zh3;     }}}       printf("******************\n******************\n******************\n ");    printf("第一次解密重置后是:%s%s%s\n",yw[0],yw[1],yw[2]);    /***************************************/    for(int j = 0; j < 3; j++){    zh1 = yw[j][strlen(yw[j]) - 1];    zh2 = yw[j][strlen(yw[j])- 2];    for(int i = strlen(yw[j]) - 1 ;i >= 0; i--){        if(i > 1){                yw[j][i] = yw[j][i-2] ;        }    if(i ==  1){        yw[j][i] = zh1;    }    if(i == 0){        yw[j][i] = zh2;     }}    }    printf("第一次解密重置后是:%s%s%s\n",yw[0],yw[1],yw[2]);}
0 0