C语言版:仿射加密

来源:互联网 发布:淘宝卖家怎么用返利网 编辑:程序博客网 时间:2024/05/21 10:03

一种加密方法
来源:小学期题目

运行图片

直接贴代码咯

#include<stdio.h>#include<stdlib.h>int JudgeK1(int k1) //判断密钥k1是否与26互素{    int i;    int iTempS, iTempB;    if (k1 == 26)    {        return 0;    }    if (k1>26)    {        iTempS = 26;        iTempB = k1;    }    else    {        iTempS = k1;        iTempB = 26;    }    for (i = 2; i <= iTempS; i++)    {        if (iTempB%i == 0 && iTempS%i == 0)        {            return 0;        }    }    return 1;}int Decode(char toDecode, int k1, int k2)//算是暴力枚举了……知道k1,k2解密密文{    int n;//倍数    for (n = 0; n <= 5000; n++)    {        if ((toDecode - k2 + 26 * n) % k1 == 0)        {            return (toDecode - k2 + 26 * n) / k1;        }    }}int main(){    int k1;    int k2;//k1与26互素    int i;    int iTimes = 0;    char cString[50];//明文    char cSafeString[50];//密文    char cDeString[50];//解密后的明文    puts("输入明文:");    gets_s(cString,50);//!项目写于visual studio,其他编译器可能是用gets(cString)写法    puts("输入密钥k1 k2:");    scanf("%d %d", &k1, &k2);    while (JudgeK1(k1) == 0)    {        puts("K1要与26互素!请重新输入K1:");        scanf("%d", &k1);    }    //加密明文    for (i = 0; cString[i] != '\0'; i++)    {        if (cString[i] >= 'a'&&cString[i] <= 'z')//小写        {            cSafeString[i] = ((cString[i] - 'a')*k1 + k2) % 26 + 'a';        }        else if (cString[i] >= 'A'&&cString[i] <= 'Z')//大写        {            cSafeString[i] = ((cString[i] - 'A')*k1 + k2) % 26 + 'A';        }        else        {            cSafeString[i] = cString[i];        }    }    cSafeString[i] = '\0';    //结束    puts("\n密文:");//打印密文        puts(cSafeString);    for (i = 0; cSafeString[i] != '\0'; ++i)//解密密文    {        if (cSafeString[i] >= 'a'&&cSafeString[i] <= 'z')        {            cDeString[i] = 'a' + Decode(cSafeString[i] - 'a', k1, k2);        }        else if (cSafeString[i] >= 'A'&&cSafeString[i] <= 'Z')        {            cDeString[i] = 'A' + Decode(cSafeString[i] - 'A', k1, k2);        }        else        {            cDeString[i] = cSafeString[i];        }    }    cDeString[i] = '\0';    //解密结束    puts("解密密文:");        puts(cDeString);    system("pause");    return 0;}