公钥加密方案(非对称加密算法)

1.为什么要引入公钥加密方案?

密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法)。
而对称加密方法有一个特点,任何通信的两个人都需要共享一个密钥,那么就会产生一个问题:若对一个n个人的团体,就需要n(n-1)/2个不同的密钥才能完成每个人之间的通信

2.什么是公钥加密算法?

简单来说,就是我们有一个发送方A,一个接收方B。A和B都有属于自己的公钥和私钥。
A和B的公钥都是公开的。如果A想给B发消息,可以用B公开的公钥来加密信息。此时这个消息只有B的私钥能解密。而私钥都是严格保密的。只有B知道,这样就实现了公钥加密。

3.限门单向函数

单向函数(one-way Function):一个函数容易计算但难于求逆
限门单向函数(Trapdoor one-way function):如果它是一个单向函数,并在具有特定限门的知识后容易求逆。

举个例子:
n=pq,其中p和q是素数。
单向函数就是:很容易可以得到P
Q的结果n,但是如果只有一个n,那么是很难分解出p和q的。

4.RSA密码的手动计算方法

首先我们需要知道一些基础知识:

具体计算方法:

5.什么是快速幂算法?

指数:在乘方a中,其中的a叫做底数,n叫做指数,结果叫幂。
f(x)=a^x , 随着x单位长度的递增,f(x)会呈“爆炸性”增长。
所以,假如你是求2的100次方,用计算器的话,可能会由于结果数值太大,导致结果无法显示。但是,我们这道题目,其实并不需要得到21的7次方的结果,我们只需要它对187做模运算所得到的结果。所以,这道题目,我们需要使用快速幂算法。

那么快速幂算法是如何计算的呢?首先,我们需要知道下列公式:

(a * b) % p = (a % p * b % p) % p

多个因子连续的乘积取模的结果等于每个因子取模后的乘积再取模的结果
故有下列公式:

(a*b*c)%d=(a%d*b%d*c%d)%d

所以对于上面那题,使用快速幂算法的计算过程如下所示:


参考博客:快速幂算法

RSA密码的手动算法+快速幂算法相关推荐

  1. 算法 - 快速幂算法

    参考博客 https://blog.csdn.net/qq_19782019/article/details/85621386 简单来说就是进行二分,底数和指数,例如 2的8次方,循环一次变成 2*2 ...

  2. 快速幂算法的原理及实现

    幂运算,即次方运算,例如计算 的值即是幂运算,在实现的时候我们往往是这样写的: int __pow(int a,int b){int ans = 1;while(b--){ans *= a;}retu ...

  3. 六十八、快速幂算法、牛顿迭代法、累加数组+二分查找的变形

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 上次介绍了二分查找算法及其四个变形问题,下面介绍二分法常用的场景和典 ...

  4. 快速幂算法相关题目(Leetcode题解-Python语言)

    50. Pow(x, n) 快速幂算法的目的,就是快速计算 x 的 n 次方.基本思路是把 n 视作二进制数,则 n 可以被分解为多个 2 的幂次方之和,如 12 对应 1100 等于 0∗20+0∗ ...

  5. 【复习】快速幂算法详解

    快速幂算法 就是求一个高精度幂次取余时的一个快速算法 比如我们要求aba^bab%m的时候 应用于快速幂算法 也就是将O(n)转化为O(logn)的算法 他的原理就是: 252^525 = 2∗2∗2 ...

  6. java位运算求幂,程序员必学:快速幂算法

    前阵子,有小伙伴在我B站的算法教程底下留言 小伙伴们有任何疑问或者希望我解说任何内容,都可以在我的小我私家B站或民众号(xmg_mj)留言哦,我会尽我最大能力.只管抽时间去写文章\录视频来回应人人. ...

  7. 【算法分析与设计】快速幂算法与快速幂取模算法

    文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...

  8. python快速幂算法解决大数取模

    1.前置性质 模运算的性质 [(a mod n)×(b mod n)] mod n = (a×b) mod n 指数可以拆分成二进制的形式,如9拆分成 1001 根据二进制的计算,1001 = ((1 ...

  9. 你必须掌握的,快速幂算法

    文章目录 1. 使用快速幂算法实现Pow(x,n) 2. 快速幂取余 1. 使用快速幂算法实现Pow(x,n) 求x的n次方,可以使用暴力解法,这种算法时间复杂度为O(n),并且,当x和n比较大的时候 ...

最新文章

  1. 用心真诚对待,懂你的人
  2. String、StringBuffer、StringBuilder三者的异同
  3. jQuery——stop
  4. Net 5.0 快速开发框架 YC.Boilerplate--框架介绍
  5. [转]Responsive Tables Demo
  6. mysql的DbUtils_Dbutils操作mysql
  7. 命令行运行Jmeter实例
  8. 心电图分析软件_家用心电图机,一键出报告,让你在家就能看懂心电图!
  9. linux 系统下安装中文输入法
  10. 系统设计(二)如何写技术设计文档
  11. 简单理解串行计算、并行计算、分布式计算、网格计算与云计算
  12. HTTP协议理解及服务端与客户端的设计实现
  13. Linux 下的IP/子网计算器:ipcalc
  14. 一个具有一些功能的网络画图板
  15. Win10 无法使用内置管理员账户打开应用程序解决方案
  16. android pcm文件大小_Android中的PCM设备
  17. Arduino与Proteus仿真实例-LCD12864液晶显示屏(ST7920)驱动仿真
  18. 任务二:移动通信发展史
  19. 昇腾AI与“紫东.太初”赋能法律服务,多模态大模型迈向“多专多能”
  20. React-native实现联系人列表分组组件

热门文章

  1. hashtable的解释
  2. WindowsForm 入门
  3. STM32——快速识别芯片引脚数
  4. android studio 打包cocos creator项目
  5. LiDAR点云处理软件
  6. Dubbo源码解析(九)Dubbo系列 源码总结+最近感悟
  7. 【PHP】php 递归、效率和分析
  8. 日期格式符RR和YY的区别
  9. Linux登录输入密码后返回登录界面
  10. Eclipse插件2