【信息安全】RSA非对称加密算法原理(详解和C++代码实现)

简介: 【信息安全】RSA非对称加密算法原理(详解和C++代码实现)

1.RSA非对称加密

(1)选择两个素数p和q ,计算n=p*q和欧拉函数φ(n)=(p-1)(q-1),选择整数e,使gcd(φ(n), e)=1(即φ(n)和e是互素),1<e<φ(n);

(2)计算e的逆元d=e-1mod φ(n)(即ed = 1 mod φ(n));

(3)得到公钥Kpub={e, n},私钥Kpri={d, n}(公开公钥Kpub ,保密私钥Kpri );

(4)加密(使用公钥Kpub):对于明文m<n,密文c=me mod n ;

(5)解密(使用私钥Kpri):对于密文c,明文m=cd mod n

2.RSA加解密示例
image.png

3.代码实现(c++)

#include <iostream>
using namespace std;

// 最大公因数
int maxCommonDivisor(int a, int b)
{
    int temp = a;
    if (a < b)
    {
        a = b;
        b = temp;
    }

    while(a % b)
    {
        temp = b;
        b = a % b;
        a = temp;
    }
    return b;
}

// 最小公倍数
int leastCommonMultiple(int a, int b)
{
    int macDivisor = maxCommonDivisor(a, b);
    return a / macDivisor  *  b;
}

// 计算 input ^ rate mod y
int multiMod(int input, int rate, int y)
{
    int start = 1;
    int arr[100];
    arr[0] = 1;
    arr[1] = input;
    int step = 1;
    int result = 1;

    while(rate)
    {
        if (step == 1)
        {
            arr[step] = input;
        }
        else
        {
            arr[step] = arr[step - 1] * arr[step - 1];
            arr[step] %= y;
        }
        if(rate&1)
        {
            result *= arr[step];
            result %= y;
        }
        step ++;
        rate = rate >> 1;
    }

    return result;
}

int main()
{
    int input;
    int p, q;
    int N, L, E, D;

    while(cin >> p >> q >> input >> E)
    {
        N = p * q;
        //最小公倍数
        L = leastCommonMultiple(p - 1, q - 1);
        //E * D mod L = 1
        int X = 1;
        while((X * L + 1) % E)
        {
            X ++;
        }

        D = (X * L + 1) / E;
        cout<<"N = " << N << "  L = " << L << " E = " << E << "  D = " << D << "  X = " << X <<endl;
        // 加密过程
        int code = multiMod(input, E, N);
        // 解密过程
        int deCode = multiMod(code, D, N);
        cout<< "code = " << code << "  deCode = " << deCode << endl;
    }
}
相关文章
|
7月前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
1133 136
|
7月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
10月前
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
487 2
【C++】深入解析C/C++内存管理:new与delete的使用及原理(二)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
289 4
|
编译器 C++ 开发者
【C++】深入解析C/C++内存管理:new与delete的使用及原理(三)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
358 3
|
存储 C语言 C++
【C++】深入解析C/C++内存管理:new与delete的使用及原理(一)
【C++】深入解析C/C++内存管理:new与delete的使用及原理
352 3
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
1308 9
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
409 4
2023/11/10学习记录-C/C++对称分组加密DES
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
488 12
|
安全 C语言 C++
彻底摘明白 C++ 的动态内存分配原理
大家好,我是V哥。C++的动态内存分配允许程序在运行时请求和释放内存,主要通过`new`/`delete`(用于对象)及`malloc`/`calloc`/`realloc`/`free`(继承自C语言)实现。`new`分配并初始化对象内存,`delete`释放并调用析构函数;而`malloc`等函数仅处理裸内存,不涉及构造与析构。掌握这些可有效管理内存,避免泄漏和悬空指针问题。智能指针如`std::unique_ptr`和`std::shared_ptr`能自动管理内存,确保异常安全。关注威哥爱编程,了解更多全栈开发技巧。 先赞再看后评论,腰缠万贯财进门。
634 0