RSA算法的简要实现(其实原理非常简单)
发布日期:2021-07-28 20:33:32 浏览次数:1 分类:技术文章

本文共 1648 字,大约阅读时间需要 5 分钟。

       前面的博文(转载阮一峰)已经讲了RSA算法的基本原理。很久以前的博文曾涉及过模幂算法,今天终于可以登台亮相了,先回顾一下模幂算法的程序吧:

#include
using namespace std;// 返回值: a的b次方,然后对n求模int getMod(int a, int b, int n){ int i, r = 1; for(i = 1; i <= b; i++) { r = ( (r % n) * (a % n) ) % n; } return r;}int main(){ int a = 3; int b = 4; int n = 5; cout << getMod(a, b, n) << endl; // 3 * 3 * 3 * 3 % 5 = 1 a = 103; b = 104; n = 105; cout << getMod(a, b, n) << endl; // 103 * 103 *...* 103 % 105 = 46, 与Windows自带计算器算出的结果完全一致 return 0;}

       好,现在假设Bob要与Alice进行通信, Alice首先来产生秘钥对,产生方式如下:

       Alice选择满足条件的 p = 61, q = 53, 计算出n = 61 * 53 = 3233, f(n) = (p - 1) * (q - 1)  = 60 * 52 = 3120,  Alice选择满足条件的e为17, 计算出e对于f(n)的模反元素d = 2753,

到此为止,Alice拥有了RSA加密的公钥(n, e)和私钥(n, d), Alice把公钥(n, e)告诉给Bob, Bob便可以利用公钥(n, e)来对信息进行加密了,不妨设:Bob想发送给Alice的信息是65, 那么Bob的加密方法为:

#include
using namespace std;// 返回值: a的b次方,然后对n求模int getMod(int a, int b, int n){ int i, r = 1; for(i = 1; i <= b; i++) { r = ( (r % n) * (a % n) ) % n; } return r;}int RSA_encrypt(int m, int n, int e){ int c = getMod(m, e, n); return c;}int main(){ int m = 65; int n = 3233; int e = 17; cout << RSA_encrypt(m, n, e) << endl; // 2790 return 0;}

     Bob把2790发给Alice, Alice收到2790后,利用私钥对2790进行解密, 解密过程为:

#include
using namespace std;// 返回值: a的b次方,然后对n求模int getMod(int a, int b, int n){ int i, r = 1; for(i = 1; i <= b; i++) { r = ( (r % n) * (a % n) ) % n; } return r;}int RSA_decrypt(int c, int n, int d){ int m = getMod(c, d, n); return m;}int main(){ int c = 2790; int n = 3233; int d = 2753; cout << RSA_decrypt(c, n, d) << endl; // 65 return 0;}

         可见, Alice正确解密了Bob发送的信息。

        当然,在真正的实际应用中,数据远远大于上述例子中的数据,此时,上述程序就失效了,需要采用新的大数映射和运算方法,openssl在这个方面就做得非常好。

  

 

转载地址:https://blog.csdn.net/stpeace/article/details/13171771 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") 与套接字(socket)
下一篇:strtok在分割字符串中的重要用途

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月03日 13时28分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章