C语言版:仿射加密

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YangZuo_Chester/article/details/76728695

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

运行图片

直接贴代码咯

#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;
}

猜你喜欢

转载自blog.csdn.net/YangZuo_Chester/article/details/76728695