117.info
人生若只如初见

c语言怎么实现rsa加密算法

下面是一个简单的C语言实现RSA加密算法的示例代码:

#include 
#include 
#include 

int gcd(int a, int b) {
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

int is_prime(int n) {
    if (n <= 1)
        return 0;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int generate_prime() {
    int p;
    do {
        p = rand() % 100 + 1;
    } while (!is_prime(p));
    return p;
}

int mod_exp(int base, int exp, int mod) {
    int result = 1;
    while (exp > 0) {
        if (exp % 2 == 1)
            result = (result * base) % mod;
        base = (base * base) % mod;
        exp /= 2;
    }
    return result;
}

int main() {
    int p = generate_prime();
    int q = generate_prime();

    int n = p * q;
    int phi = (p - 1) * (q - 1);

    int e = 2;
    while (gcd(e, phi) != 1) {
        e++;
    }

    int d = 1;
    while ((d * e) % phi != 1) {
        d++;
    }

    printf("Public key: (%d, %d)\n", e, n);
    printf("Private key: (%d, %d)\n", d, n);

    int plaintext = 123;
    int ciphertext = mod_exp(plaintext, e, n);
    printf("Encrypted message: %d\n", ciphertext);

    int decrypted_text = mod_exp(ciphertext, d, n);
    printf("Decrypted message: %d\n", decrypted_text);

    return 0;
}

此代码生成两个随机素数p和q,计算n和phi的值,选择一个公钥e和私钥d,然后使用公钥对明文进行加密,使用私钥对密文进行解密。请注意,此处的加密和解密仅用于示例目的,实际应用中应该使用更大的素数和更复杂的操作。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe46dAzsLAQReAlI.html

推荐文章

  • c语言goto用法是什么

    在C语言中,goto语句用于从一个位置跳转到另一个位置。它可以用于跳出循环、条件语句或者函数。goto语句的语法如下:
    goto label;
    ...
    label: //...

  • goto在c语言中的运用方法是什么

    goto 语句在 C 语言中允许程序从一个位置跳转到另一个位置。然而,在实际编程中,过度使用 goto 语句通常被认为是一种不好的编程实践,因为它可能导致代码结构混...

  • c语言堆和栈的区别是什么

    C语言中的堆和栈是两种不同的内存分配方式。 栈(Stack):栈是由编译器自动分配和释放的内存区域,用于存储局部变量和函数调用的上下文信息。栈的特点是先进后出...

  • C语言结构体数组怎么定义和使用

    在C语言中,可以通过定义结构体数组来存储多个具有相同数据类型的结构体对象。下面是定义和使用结构体数组的示例代码:
    #include // 定义一个结构体类型

  • oracle存储过程提示表不存在怎么解决

    当在Oracle存储过程中提示表不存在时,通常是由于以下原因导致的: 表名拼写错误:检查存储过程中引用的表名是否正确拼写。 表所在的模式不正确:确保存储过程中...

  • c语言字符怎么转换为ascii码

    要将C语言字符转换为ASCII码,可以使用强制类型转换将字符变量转换为整数类型。例如:
    char c = 'A';
    int ascii = (int)c; printf("ASCII码为: %d", a...

  • layui怎么获取table数据

    在Layui中获取表格数据的方法是通过获取表格的实例,然后调用表格实例的方法来获取数据。
    具体步骤如下: 获取表格实例: var table = layui.table; 调用表...

  • mfc两个对话框的消息怎么传递

    在MFC中,可以通过以下方法传递两个对话框之间的消息: 使用全局变量:在一个对话框中定义一个全局变量,在另一个对话框中可以直接访问这个全局变量来传递消息。...