查看原文
其他

什么是RSA算法

脚本之家 2021-06-30

The following article is from 算法面试题 Author Great Eagle

脚本之家

你与百万开发者在一起

作者: Great Eagle

本文由公众号 算法面试题 授权转载

最近小E在学习计算机网络,对其中的RSA加密算法产生了兴趣。然而书中并没有对此算法进行介绍,只是一笔带过。于是,小E来请教老师。


游戏


算法面试题提示:不知道如何计算27^27 mod 55的读者,请移步《超级次方取模问题》


点评:本文介绍了RSA算法的工作机理。与此相关的一种攻击叫做中间人攻击,而https协议中的数字签名机制就是来应对这种攻击的。本文不再对中间人攻击展开介绍,有兴趣的读者可以自行阅读相关资料。另外,值得一提的是,假如未来量子计算机得到普及,那么RSA算法将不再安全,使用量子计算机能够在秒级时间内分解大整数。关于未来,让我们一起期待吧!


代码实现


Talk is cheap.Show me the code.


1//返回a的p次方对n取模的值
2function superPow(a, p, n) {
3    let b = String(p).split("").map(item => Number(item));
4
5    function powMod(x, y) {
6        let res = 1;
7        for(let i = 0; i < y; i++) {
8            res = res * x % n;
9        }
10        return res;
11    }
12
13    let res = 1;
14    a %= n;
15    for(let i = b.length - 1; i >= 0; i--) {
16        res = powMod(a, b[i]) * res % n;
17        a = powMod(a, 10);
18    }
19    return res;
20}
21
22//以p=5,q=11,n=55,r=40,e=3,d=27为例
23const e = 3,
24    d = 27,
25    n = 55;
26
27//返回加密后的数组
28function encrypt(arr) {
29    return arr.map(item => superPow(item, e, n));
30}
31
32//对加密的数组进行解密,返回解密后的数组
33function decrypt(arr) {
34    return arr.map(item => superPow(item, d, n));
35}
36
37console.log(encrypt([34567])); //[27, 9, 15, 51, 13]
38console.log(decrypt([279155113])); //[3, 4, 5, 6, 7]

温馨提示:可左右滑动

复制代码请前往https://blog.csdn.net/Great_Eagle/article/details/85255334

-END-

●  书榜 | 计算机书籍(4.22-4.28)销售排行榜

●  脚本之家粉丝福利,请查看!

●  罗永浩认输了

● 微软劝你别再使用 IE 浏览器

● 送书 | 5本Python好书上新,来撩~

● C 主导、C++与 C# 为辅,揭秘 Windows 10 源代码!

● 入行AI,程序员为什么要学习NLP?

●  五款主流Linux发行版性能对比,不求最强但求稳

小贴士

返回 上一级 搜索“Java 女程序员 大数据 留言送书 运维 算法 Chrome 黑客 Python JavaScript 人工智能 女朋友 MySQL 书籍 等关键词获取相关文章推荐。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存