非对称加密原理及RSA加密步骤
本篇延续 对称加密、非对称加密深度解析 继续对分对称加密进行深入介绍。
非对称加密的概念
非对称加密有两个密钥, 公钥(Public Key)和私钥(Private Key)。公钥和私钥是一对。
- 使用公钥对数据加密,只能使用私钥解密
- 使用私钥对数据加密,只能使用对应的公钥解密。
因为公钥和私钥是不同的密钥, 所以这种加密方式称为非对称加密。
非对称加密的优缺点
- 优点:算法强度复杂,安全性高
- 缺点: 速度慢
非对称加密的工作过程
- 双方分别产生一对公钥和私钥
- 私钥各自保密,公钥告诉对方
- A要发信息给B,A用B的公钥加密信息,B用自己的私钥解密
非对称加密的使用场景
- 信息加密
- 登录认证。客户端保存私钥,服务端保存公钥。
- 数字签名。私钥加密,得到签名。
非对称加密的主要算法
- RSA , 最广泛
- DSA: Digital Signature Algorithm,
- Elgamal ,是Schnorr 和ElGamal 签名算法的变种
- Rabin
- D-H , Diffie-Hellman ,
- ECC, 椭圆曲线加密算法
- 背包算法
RSA算法的加密步骤
RSA是目前比较流行的非对称加密算法。其主要的加密步骤是:
- 找出两个质数
P、Q
。 - 计算公共模数
N=P*Q
- 欧拉函数
$ \varphi(N) = (P-1)(Q-1) $
- 计算公钥E
$ 1< E< \varphi(N) $
E 的取值是整数, 且E和 φ(N) 互质。 - 计算私钥D E * D % φ(N) = 1
- 使用公钥加密
$ C = M^E mod N $
C代表密文, M代表明文 - 使用私钥解密
$ M = C^D mod N $
- 公钥 (E,N)
- 私钥 (D,N)
示例演示
- 找两个质数 ,以 3、11 为例
P=3
Q=11
- 计算公共模数
N=P*Q=3*11=33
- 计算欧拉函数的值
φ(N) = (P-1)(Q-1) = 2 * 10 = 20
- 计算公钥
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”。
- 私钥解密
根据公式$ 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加密步骤相关推荐
- python post请求rsa加密_Python的加密方式:RSA加密
Python的加密方式:RSA加密 RSA加密是一种非对称加密,通常使用公钥加密,私钥解密,私钥签名,公钥验签. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)S ...
- RSA加密原理与RSA公钥加密系统、数字签名
通过公钥加密系统,可以对传输于两个通信单位之间的消息进行加密,即使窃听者窃听到加密之后的消息,也不能对其破译. 1.RSA公钥加密原理 1.1 几个核心概念 公钥P与公钥函数P() 密钥S与密钥函数S ...
- java android rsa加密解密_Android RSA加密解密
转载 http://blog.csdn.net/bbld_/article/details/38777491 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十 ...
- ios android rsa加密解密,IOS RSA加密解密
最近项目中对接口进行了rsa 加密. 写下过程以便复习 公钥私钥一般是有后台给的,这里为了方便 自己生成一对秘钥 生成公钥 私钥. 终端中: 生成原始 RSA私钥文件 private_key.pem ...
- ios php rsa加密解密,php rsa加密解密使用详解
第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...
- python rsa加密长度_python RSA加密最新(RSA/ECB/PKCS1Padding)
遇到一个 java 的RSA/ECB/PKCS1Padding 加密 要改成python的 网上搜一堆不靠谱的,没办法只能自己动手写一份了 中间遇到一个ERROR: OverflowError: 45 ...
- 基于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 提 供 者: 姚双奇 详细说明: ...
- android底层rsa加密,android 下RSA加密解密
参考文章 Base64.java需要换成下面这个类 package club.hb168.hmi.util.rsa; import java.io.ByteArrayOutputStream; imp ...
- php+文件+加密+原理,PHP的加密方式及原理
复制代码 代码如下: //变量注意区分数字 "0" 和 字符"O" $OOO000000=urldecode('%66%67%36%73%62%65%68%70 ...
最新文章
- 网络工程师_记录的一些真题_2008下半年上午
- 郑可迪 : 培养数据思维,投身电力大数据领域研究 | 提升之路系列(一)
- springMVC的@RequestParam是必须滴
- C#版二维码生成器附皮肤下载
- linux外部命令帮助,Linux的命令帮助
- lodash源码分析之baseFindIndex中的运算符优先级
- MYSQL-查询过去7天的数据 当天没有值的赋予默认值0或者其他
- php小算法总结一(数组重排,进制转换,二分查找)
- 位、字、字节的区别 | 汇编伪指令db,dw,dd
- linux下verilog功能验证,Verilog 条件语句介绍
- 阿里云加速器拉取tomcat
- 国笔手机输入法MTK支持的语言
- python面板数据模型操作步骤_面板模型回归操作指南,适合初学者!
- matlab imwareaopen,李祎 副教授
- scikit-learn中交叉验证及其用于参数选择、模型选择、特征选择的例子
- jupyter notebook更换浏览器一直不成功
- 这个是没事的时候做出来看的一系列算数表
- WinUSB - 微软为所有 USB 设备提供的常规驱动程序
- python测试开发教程 龙腾_龙腾源码网京东 有货自动下单,Python 脚本 你的口罩...
- torch Dataloader中的num_workers