本篇延续 对称加密、非对称加密深度解析 继续对分对称加密进行深入介绍。

非对称加密的概念

非对称加密有两个密钥, 公钥(Public Key)和私钥(Private Key)。公钥和私钥是一对。

  • 使用公钥对数据加密,只能使用私钥解密
  • 使用私钥对数据加密,只能使用对应的公钥解密。
    因为公钥和私钥是不同的密钥, 所以这种加密方式称为非对称加密。

非对称加密的优缺点

  • 优点:算法强度复杂,安全性高
  • 缺点: 速度慢

非对称加密的工作过程

  1. 双方分别产生一对公钥和私钥
  2. 私钥各自保密,公钥告诉对方
  3. A要发信息给B,A用B的公钥加密信息,B用自己的私钥解密

非对称加密的使用场景

  1. 信息加密
  2. 登录认证。客户端保存私钥,服务端保存公钥。
  3. 数字签名。私钥加密,得到签名。

非对称加密的主要算法

  • RSA , 最广泛
  • DSA: Digital Signature Algorithm,
  • Elgamal ,是Schnorr 和ElGamal 签名算法的变种
  • Rabin
  • D-H , Diffie-Hellman ,
  • ECC, 椭圆曲线加密算法
  • 背包算法

RSA算法的加密步骤

RSA是目前比较流行的非对称加密算法。其主要的加密步骤是:

  1. 找出两个质数 P、Q
  2. 计算公共模数 N=P*Q
  3. 欧拉函数 $ \varphi(N) = (P-1)(Q-1) $
  4. 计算公钥E $ 1< E< \varphi(N) $
    E 的取值是整数, 且E和 φ(N) 互质。
  5. 计算私钥D E * D % φ(N) = 1
  6. 使用公钥加密 $ C = M^E mod N $
    C代表密文, M代表明文
  7. 使用私钥解密 $ M = C^D mod N $
  • 公钥 (E,N)
  • 私钥 (D,N)

示例演示

  1. 找两个质数 ,以 3、11 为例
P=3
Q=11
  1. 计算公共模数
N=P*Q=3*11=33
  1. 计算欧拉函数的值
φ(N) = (P-1)(Q-1) = 2 * 10 = 20
  1. 计算公钥
1 < E < φ(N)

E的取值必须是整数, 且 和 φ(N) 必须是互质数,所以E可以取值有 {3, 7, 9, 11, 13, 17, 19}, 这里取 E = 3。
5. 计算私钥

E * D % φ(N) = 1  =>  3 * D  % 20 = 1

3乘以7 = 21, 21和20取模是1 ,所以推出D = 7
6. 公钥加密
简单起见,这里对“2” 进行加密 , 上面算出的公钥的值是 E = 3, 使用算法 $ C = M^E mod N $ 进行加密。
C = 2^3 % 33 = 8
“2” 经过加密之后的密文是 “8”。

  1. 私钥解密
    根据公式 $ M = C^D mod N $
    这里
密文 C=8
私钥 D=7
公共模数 N=33

得出
M = 8^7 % 33 =》
8 * 8 * 8 * 8 * 8 * 8 * 8 % 33 = 2

非对称加密原理及RSA加密步骤相关推荐

  1. python post请求rsa加密_Python的加密方式:RSA加密

    Python的加密方式:RSA加密 RSA加密是一种非对称加密,通常使用公钥加密,私钥解密,私钥签名,公钥验签. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)S ...

  2. RSA加密原理与RSA公钥加密系统、数字签名

    通过公钥加密系统,可以对传输于两个通信单位之间的消息进行加密,即使窃听者窃听到加密之后的消息,也不能对其破译. 1.RSA公钥加密原理 1.1 几个核心概念 公钥P与公钥函数P() 密钥S与密钥函数S ...

  3. java android rsa加密解密_Android RSA加密解密

    转载 http://blog.csdn.net/bbld_/article/details/38777491 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十 ...

  4. ios android rsa加密解密,IOS RSA加密解密

    最近项目中对接口进行了rsa 加密. 写下过程以便复习 公钥私钥一般是有后台给的,这里为了方便 自己生成一对秘钥 生成公钥 私钥. 终端中: 生成原始 RSA私钥文件 private_key.pem ...

  5. ios php rsa加密解密,php rsa加密解密使用详解

    第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...

  6. python rsa加密长度_python RSA加密最新(RSA/ECB/PKCS1Padding)

    遇到一个 java 的RSA/ECB/PKCS1Padding 加密 要改成python的 网上搜一堆不靠谱的,没办法只能自己动手写一份了 中间遇到一个ERROR: OverflowError: 45 ...

  7. 基于java的rsa加密程序_RSA rsa加密程序,rsa java源码和 rsa的jsp Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...

    文件名称: RSA下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 169 KB 上传时间: 2014-04-23 下载次数: 0 提 供 者: 姚双奇 详细说明: ...

  8. android底层rsa加密,android 下RSA加密解密

    参考文章 Base64.java需要换成下面这个类 package club.hb168.hmi.util.rsa; import java.io.ByteArrayOutputStream; imp ...

  9. php+文件+加密+原理,PHP的加密方式及原理

    复制代码 代码如下: //变量注意区分数字 "0" 和 字符"O" $OOO000000=urldecode('%66%67%36%73%62%65%68%70 ...

最新文章

  1. 网络工程师_记录的一些真题_2008下半年上午
  2. 郑可迪 : 培养数据思维,投身电力大数据领域研究 | 提升之路系列(一)
  3. springMVC的@RequestParam是必须滴
  4. C#版二维码生成器附皮肤下载
  5. linux外部命令帮助,Linux的命令帮助
  6. lodash源码分析之baseFindIndex中的运算符优先级
  7. MYSQL-查询过去7天的数据 当天没有值的赋予默认值0或者其他
  8. php小算法总结一(数组重排,进制转换,二分查找)
  9. 位、字、字节的区别 | 汇编伪指令db,dw,dd
  10. linux下verilog功能验证,Verilog 条件语句介绍
  11. 阿里云加速器拉取tomcat
  12. 国笔手机输入法MTK支持的语言
  13. python面板数据模型操作步骤_面板模型回归操作指南,适合初学者!
  14. matlab imwareaopen,李祎 副教授
  15. scikit-learn中交叉验证及其用于参数选择、模型选择、特征选择的例子
  16. jupyter notebook更换浏览器一直不成功
  17. 这个是没事的时候做出来看的一系列算数表
  18. WinUSB - 微软为所有 USB 设备提供的常规驱动程序
  19. python测试开发教程 龙腾_龙腾源码网京东 有货自动下单,Python 脚本 你的口罩...
  20. torch Dataloader中的num_workers

热门文章

  1. PyQt4设置窗口左上角的小图标
  2. arm-linux-androideabi-addr2line
  3. 浅谈微博营销如何吸引流量
  4. asp.net中防刷新重复提交与防后退解决办法
  5. ASP.NET字符显示不正确的解决方法
  6. SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理
  7. 如何解决testng执行用例失败自动重跑问题
  8. 【报告分享】完美日记品牌分析报告.pdf(附68页pdf全文下载链接)
  9. 速成pytorch学习——6天Dataset和DataLoader
  10. 报名截止仅剩5天!50万冠军大奖,错过再等一年!