⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 affine.c

📁 这是一个古典加密算法。是最近自己编写的。
💻 C
字号:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
int gcd(int a, int b)    /*辗转相除法求a,b的最大公因数*/
{
    int k = 0;

    do
    {
        k = a%b;
        a = b;
        b = k;
    }while(k!=0);
    return a;
}

int Ni(int a, int b)  /*求a相对于b的逆*/
{
    int i = 0;
    while(a*(++i)%b!=1);
    return i;
}

char Affinec(char *c,int ka,int kb)          /*仿射加密*/
{
    int length, i=0,tmp;
    length = strlen(c);
    /*printf("Input the key(2 numbers): ");
    scanf("%d%d", &ka, &kb); */
    getchar();
    if(gcd(ka,26)!=1)
    {
        printf("The value of the key is error!\nPress any key to return...");
        return;
    }

    for(i=0; i<length; i++)
    {
        if(c[i]>96&&c[i]<123)
        c[i] = (ka*(c[i]-97)+kb)%26+65;
        else if(c[i]>64&&c[i]<91)
        c[i] = (ka*(c[i]-65)+kb)%26+65;
    }
    printf("Result is: %s\n", c);
    return c;
}
char Affinecd(char *c,int ka,int kb)          /*仿射解密*/
{
    int length, i=0,tmp;
    length = strlen(c);
    for(i=0; i<length; i++)
    {
        if(c[i]>64&&c[i]<91)
        {
        tmp = Ni(ka,26)*((c[i]-65)-kb);
        if(tmp<0)
            c[i] = tmp%26+26+97;
        else
            c[i] = tmp%26+97;
        }
    }
    printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
    printf("Press any key to return...");
    getch();
}
void main()
{
    char *s;
    int a,b;
    gets(s);
    scanf("%d%d",&a,&b);
    Affinec(s,a,b);
    Affinecd(s,a,b);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -