欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 第三次作业(密码学)

第三次作业(密码学)

2025/5/4 2:54:34 来源:https://blog.csdn.net/2402_85171273/article/details/147602298  浏览:    关键词:第三次作业(密码学)

#include <stdio.h>
#include <stdlib.h>

// 计算最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }

    return a;
}

// 计算模幂运算
int mod_pow(int base, int exponent, int modulus) {
    int result = 1;
    base = base % modulus;

    while (exponent > 0) {
        if (exponent % 2 == 1) {
            result = (result * base) % modulus;
        }

        exponent = exponent >> 1;
        base = (base * base) % modulus;
    }

    return result;
}

// 生成密钥
void generate_keys(int p, int q, int *e, int *d, int *n) {
    *n = p * q;
    int phi = (p - 1) * (q - 1);

    // 选择e
    for (*e = 2; *e < phi; (*e)++) {
        if (gcd(*e, phi) == 1) {
            break;
        }
    }

    // 计算d
    for (*d = 2; *d < phi; (*d)++) {
        if ((*e * *d) % phi == 1) {
            break;
        }
    }
}

// 加密
int encrypt(int plaintext, int e, int n) {
    return mod_pow(plaintext, e, n);
}

// 解密
int decrypt(int ciphertext, int d, int n) {
    return mod_pow(ciphertext, d, n);
}

int main() {
    int p = 61;
    int q = 53;
    int e, d, n;

    // 生成密钥
    generate_keys(p, q, &e, &d, &n);

    int plaintext = 65;
    printf("明文: %d\n", plaintext);

    // 加密
    int ciphertext = encrypt(plaintext, e, n);
    printf("密文: %d\n", ciphertext);

    // 解密
    int decrypted = decrypt(ciphertext, d, n);
    printf("解密后的明文: %d\n", decrypted);

    return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词