第三次作业(密码学)

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

}

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot