RSA加密原理(二)
RSA加密原理(二)本文转载与阮一峰老师的RSA算法原理(二)
正文开始!
上一次,我介绍了一些数论知识。
有了这些知识,我们就可以看懂RSA算法。这是目前地球上最重要的加密算法。
密钥生成的步骤我们通过一个例子,来理解RSA算法。假设爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢?
第一步,随机选择两个不想等的质数p和q。
爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。)
第二步,计算p和q的乘积n。
爱丽丝就把61和53相乘。
n=61*53=3233n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
第三步,计算n的欧拉函数$\phi(n)$
根据公式:
\phi(n)=\phi(pq)=\phi(p)*\phi(q)=(p-1)(q-1)爱丽丝算出$\phi(n)$等于$60*52$,即3120。
第四步,随机选择一个整数e,条件是$1<e<\phi(n)$,且e与$\phi(n)$互质。
爱丽丝就在1到31 ...
RSA算法原理之数论知识
RSA算法原理(一)之数论知识本文转载于阮一峰老师的RSA算法原理(一)
正文开始!
如果你问我,哪一种算法最重要?
我可能会回答“公钥加密算法”。
因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。
进入正题之前,我先简单介绍一下,什么是”公钥加密算法”。
一点历史1976年以前,所有的加密方法都是同一种模式:
甲方选择某一种加密规则,对信息进行加密;
乙方使用同一种规则,对信息进行解密。
由于加密和解密使用同样规则(简称”密钥”),这被称为“对称加密算法”(Symmetric-key algorithm)。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即 ...
单向加密&双向加密
单向加密、双向加密前言在之前的文章Web页面子资源完整性校验详细指南有涉及到将文件进行sha384加密后base64编码来检验文件是否被篡改。对其中用到的工具openssl比较感兴趣,所以顺带了解了加密算法,算是加密算法的一些常识。
以下为正文。
加密算法一般可分为两种,即单向加密算法和双向加密算法。
双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,在需要的时候,又可以使用一定的算法将这些加密以后的密文数据解密为原来的明文数据。双向加密适合于隐秘通讯,比如,比如在网络上注册用户或者购买商品时,提交的真实姓名、身份证号码、银行账号、信用卡密码等信息,应当通过双向加密算法加密以后,再在网络上传输,这样,可以有效的防止黑客的“偷听”,保证数据的安全,同时,网站接收到我们的数据以后,可以通过解密算法来获得准确的信息。
双向加密既可以加密,又可以解密。而单向加密则刚好相反,它只能对明文数据进行加密,而不能对加密了的密文数据再解密成原来的明文数据。可能读者会认为,不能解密的加密算法有什么作用呢?在实际应用中,对软件系统数据库中的系统用户信息(如用户密码)加密, ...
Node.js中的console.log()输出彩色字体
Node.js中的console.log()输出彩色字体前言最近在写脚本的时候发现在控制台输出的信息不够显眼,比较单调。但是又没必要为了这一个小需求再引入一个第三方库(chalk),于是就想着研究一下控制台输出彩色字体的原理是什么。
请注意,此篇文章中的颜色仅适用于仿真器(putty、secureCRT、XShell),以及unix终端,不适用于CMD(但依然可用于WIN下的仿真器)
简介
在终端或仿真器中输入下面的代码,并回车,预览最直接的效果。
1echo -e "\033[1;31mI ♡ You \e[0m"
请注意,引号内的\e等同于\033;\033、\x1b和\e效果是一样,对应键盘左上角Esc键对应的ASCII码(8进制);
在nodeJS环境下只有\033和\x1b生效。
12console.log('\x1b[1;31;46mI ♡ You \033[0m');console.log('\033[31;43mI ♡ You \x1b[0m');
控制台输出为:
通用的控制文本颜色的转义序列 ...
SQL入门学习
SQL入门学习前言国庆节在家学习了一下SQL语言,主要是通过阮一峰老师在周刊推荐的网站SQLBolt。一共18节小课,每一节都有对应的练习题,相对来说比较简单,适合入门。
SQL Lesson 1: SELECT queries1234567# Select query for a specific columnsSELECT <column>, <another_column>, …FROM <mytable>;# Select query for all columnsSELECT * FROM <mytable>;
ExerciseTable: Movies
Id
Title
Director
Year
Length_minutes
1
Toy Story
John Lasseter
1995
81
2
A Bug’s Life
John Lasseter
1998
95
3
Toy Story 2
John Lasseter
1999
93
4
Monsters, Inc.
Pete Docter
20 ...
Web页面子资源完整性校验详细指南
Web页面子资源完整性校验详细指南前言本文转载于Web页面子资源完整性校验详细指南,对作者表示感谢。
文章内容有部分修改,但整体效果相同。
这次要跟大家分享的是关于Subresource Integrity(子资源完整性)的内容。如果平时对Web安全关注不是很多的话,可能没怎么听过这个术语。不知道也没关系,接下来我会跟大家一起来研究讨论一下这个内容,相信在看完这篇文章之后,你能够深入的理解什么是SRI,为什么要使用SRI,以及在有这方面需求的情况下如何在项目中实践使用SRI。
SRI是什么,以及解决了什么问题SRI是Subresource Integrity的简写,表示的是子资源的完整性。比如对于我们在页面中通过link和script标签引入的样式文件或者引入使用的第三方库就是页面的的子资源。比如像下面这样:
123456<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" ...
转载-节选-科技爱好者周刊节选(176&177期)
科技爱好者周刊(第 176&177 期)前言最近事情(当然是喜事了~~)比较多,阮老师的周刊有两期没看,今天一起来补看一下
《176周刊》链接:科技爱好者周刊176期
《177周刊》链接:科技爱好者周刊177期
176期:中国法院承认GPL吗?科技动态 部分
游戏厅的衰落
日本的电子游戏厅曾经盛极一时,各种街机玲琅满目,但是,现在已经盛况不再。根据警方的统计,1986年日本全国曾经有 26,573 家游戏厅,到了2019年只剩下 4,022 家,疫情爆发以后,数目更是继续锐减,可能不到最高峰时的十分之一。
互联网和手机游戏的兴起,是游戏厅衰落的主要原因。目前,游戏厅的最大顾客来源是传统游戏爱好者,以及老年人。一位65岁的老人说,他把游乐厅当作社交场所,可以结交很多朋友。
漂浮式光伏电站
山东德州最近建成了,世界最大的单体水上漂浮式光伏电站。在水库的水面上,漂浮着面积2200亩的太阳能光伏板,设计总容量为320兆瓦,第一期建成了200兆瓦。
漂浮式光伏电站的好处是,对水体没有破坏性,比较环保,节省地基成本,施工周期短,还可以减少水库的水量蒸发、遮挡阳光抑制藻类生长。另 ...
转载-节选-科技爱好者周刊节选(175期)
科技爱好者周刊(第 175 期):知识广度 vs 知识深度前言本文节选自阮一峰老师的《科技爱好者周刊》第175期。
《周刊》链接:科技爱好者周刊175期
正文本周话题 部分:知识广度 vs 知识深度
知识广度和知识深度也是我毕业两年多以来一直在思考的问题,我给自己的答案就是用深度去辐射广度。现在看来也不算错~~ 😊
国外有人讨论过知识广度和知识深度这个话题:
作者画了一张图,将世界上的程序员比喻成三种形状。
(1)大饼型:拥有知识广度,但没有知识深度。
(2)竹竿型:拥有知识深度,但没有知识广度。
(3)T 型:介于前两者之间。
文章也认为,通常情况下,竹竿型程序员的出路最好,雇主愿意为知识深度买单。因为现代社会高度分工,越是大公司,岗位职责越明确,需要的是领域专家,而不是多面手。
但是作者提到,有一种情况例外,知识广度有明显优势,那就是确定项目路线的时候。
请看上图,右上角有一个黑点,那是公司的目标。当前位置在左下角的原点,两点之间没有现成的道路,需要自己寻找实现路径。
这时,知识广度就发挥作用了,了解的信息越广泛,知道的情况越多,就越可能具备洞察力,能够在多条路径里面,选 ...
转载-节选-科技爱好者周刊节选(174期)
科技爱好者周刊(第 174 期):全能程序员 vs 特长程序员前言本文节选自阮一峰老师的《科技爱好者周刊》第174期。
《周刊》链接:科技爱好者周刊174期
又到周五啦 开心~~ 🤩 🥰 ✌️
正文本周话题 部分
软件行业其实也是如此,”全能程序员”的出路,明显不如”特长程序员”。
如果你什么都会干,前端、后端、数据库、服务器管理都能上手,那么哪里缺人手,就会让你顶上去。但是,一旦遇到疑难问题,又指望不了你,因为你不是那个方面的专家,解决不了。
反过来,你精通某一项技术,其他都不懂,公司反而会觉得你更有价值。因为你可以把这个技术做得很深,克服技术难点,超过竞争对手,所以你的晋升会快得多。
新人如果想在软件行业长远发展,建议选择一两个技术方向进行专研,成为专家,而不要什么技术都懂一点,但是哪一项都不精通。
自己的想法:其实全能程序员和特长程序员,可以转换为另外一个问题:技术的广度和深度哪一个更重要?个人拙见:比较偏向于技术的深度,让深度去辐射广度。因为我认为到了某一项技术到了一定的深度,广度会自然而然的产生的。🤓
科技动态 部分
电子咖啡
很多人工作疲惫时,会喝一杯咖啡振 ...
深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系
深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系前言关于 Event Loop 的文章很多,但是有很多只是在讲「宏任务」、「微任务」,我先提出几个问题:
每一轮 Event Loop 都会伴随着渲染吗?
requestAnimationFrame 在哪个阶段执行,在渲染前还是后?在 microTask 的前还是后?
requestIdleCallback 在哪个阶段执行?如何去执行?在渲染前还是后?在 microTask 的前还是后?
resize、scroll 这些事件是何时去派发的。
这些问题并不是刻意想刁难你,如果你不知道这些,那你可能并不能在遇到一个动画需求的时候合理的选择 requestAnimationFrame,你可能在做一些需求的时候想到了 requestIdleCallback,但是你不知道它运行的时机,只是胆战心惊的去用它,祈祷不要出线上 bug。
这也是本文想要从规范解读入手,深挖底层的动机之一。本文会酌情从规范中排除掉一些比较晦涩难懂,或者和主流程不太相关的概念。更详细的版本也可以直接去读这个规范,不过比较费时费力。
其实我看到这个地方的 ...