非对称加密
来源:互联网 发布:基恩士视觉软件 编辑:程序博客网 时间:2024/05/16 16:08
摘自http://www.codeceo.com/article/android-asymmetric-encryption.html
1. 介绍
与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
简单理解为:加密和解密是不同的钥匙
2. 常见算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,其中支付宝使用的就是RSA算法
3. RSA 算法原理
质因数、欧拉函数、模反元素
原理很复杂,只需要知道内部是基于分解质因数和取模操作即可
4. 使用步骤
String Pwd = "123456"; //1,获取cipher 对象 Cipher cipher = Cipher.getInstance("RSA"); //2,通过秘钥对生成器KeyPairGenerator 生成公钥和私钥 KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair(); //使用公钥进行加密,私钥进行解密(也可以反过来使用) PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); //3,使用公钥初始化密码器 cipher.init(Cipher.ENCRYPT_MODE, publicKey); //4,执行加密操作 byte[] result = cipher.doFinal(Pwd.getBytes()); Log.e("jiaMiHou", new String(result,"utf-8")); //使用私钥初始化密码器 cipher.init(Cipher.DECRYPT_MODE, privateKey); //执行解密操作 byte[] deResult = cipher.doFinal(result); Log.e("jieMiHou", new String(deResult,"utf-8"));
7. 非对称加密用途
身份认证
一条加密信息若能用A 的公钥能解开,则该信息一定是用A 的私钥加密的,该能确定该用户是A。
陌生人通信
A 和B 两个人互不认识,A 把自己的公钥发给B,B 也把自己的公钥发给A,则双方可以通过对方的公钥加密信息通信。C 虽然也能得到A、B 的公钥,但是他解不开密文。
秘钥交换
A 先得到B 的公钥,然后A 生成一个随机秘钥,例如13245768,之后A 用B 的公钥加密该秘钥,得到加密后的秘钥,例如dxs#fd@dk,之后将该密文发给B,B 用自己的私钥解密得到123456,之后双方使用13245768 作为对称加密的秘钥通信。C 就算截获加密后的秘钥dxs#fd@dk,自己也解不开,这样A、B 二人能通过对称加密进行通信。
8. 总结
非对称加密一般不会单独拿来使用,他并不是为了取代对称加密而出现的,非对称加密速度比对称加密慢很多,极端情况下会慢1000 倍,所以一般不会用来加密大量数据,通常我们经常会将对称加密和非对称加密两种技术联合起来使用,例如用非对称加密来给称加密里的秘钥进行加密(即秘钥交换)。
- 对称加密/非对称加密
- 对称加密、非对称加密
- 对称加密/非对称加密
- 对称加密 非对称加密
- 对称加密、非对称加密
- 单向加密 对称加密 非对称加密
- 对称和非对称加密
- 对称与非对称加密
- 对称与非对称加密
- openssl 对称 非对称加密
- 非对称加密技术
- 非对称加密
- 非对称加密
- 非对称加密
- 非对称加密
- RSA 非对称加密
- RSA非对称加密
- RSA非对称加密
- NSOperation学习笔记
- 用户管理
- 使vim编辑器显示行号
- hdu1007最近点对(分治)
- 仿映客送礼特效
- 非对称加密
- [React Native]获取网络状态
- JNI在编译时的源文件和生成文件的层次结构详解
- Android文件存储学习
- 当使用dbeaver导出多个sql文件,怎么快速的把它合并成一个文件,可以针对多种不同的类型
- 源代码加密解决方案(透明加密与环境加密的区别 )
- 文章标题
- Java数据类型和运算符:
- 树莓派+motion 搭建摄像头监控系统