美文网首页
非对称加密

非对称加密

作者: Blizzard_liu | 来源:发表于2017-05-06 23:18 被阅读78次

与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
简单理解为:加密和解密是不同的钥匙

Paste_Image.png

常见算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等

RSA 算法原理

质因数、欧拉函数、模反元素
原理很复杂,只需要知道内部是基于分解质因数和取模操作即可

使用步骤

1. //1,获取cipher 对象
2. Cipher cipher = Cipher.getInstance("RSA");
3. //2,通过秘钥对生成器KeyPairGenerator 生成公钥和私钥
4. KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
5. //使用公钥进行加密,私钥进行解密(也可以反过来使用)
6. PublicKey publicKey = keyPair.getPublic();
7. PrivateKey privateKey = keyPair.getPrivate();
8. //3,使用公钥初始化密码器
9. cipher.init(Cipher.ENCRYPT_MODE, publicKey);
10. //4,执行加密操作
11. byte[] result = cipher.doFinal(content.getBytes());
12. //使用私钥初始化密码器
13. cipher.init(Cipher.DECRYPT_MODE, privateKey);
14. //执行解密操作
15. byte[] deResult = cipher.doFinal(result);

注意点
//一次性加密数据的长度不能大于117 字节
private static final int ENCRYPT_BLOCK_MAX = 117;
//一次性解密的数据长度不能大于128 字节
private static final int DECRYPT_BLOCK_MAX = 128;

分批操作

5. /**
6. * 分批操作
7. *
8. * @param content 需要处理的数据
9. * @param cipher 密码器(根据cipher 的不同,操作可能是加密或解密)
10. * @param blockSize 每次操作的块大小,单位为字节
11. * @return 返回处理完成后的结果
12. * @throws Exception
13. */
14. public static byte[] doFinalWithBatch(byte[] content, Cipher cipher, int blockSize) throws
Exception {
15. int offset = 0;//操作的起始偏移位置
16. int len = content.length;//数据总长度
17. byte[] tmp;//临时保存操作结果
18. ByteArrayOutputStream baos = new ByteArrayOutputStream();
19. //如果剩下数据
20. while (len - offset > 0) {
21. if (len - offset >= blockSize) {
22. //剩下数据还大于等于一个blockSize
23. tmp = cipher.doFinal(content, offset, blockSize);
24. }else {
25. //剩下数据不足一个blockSize
26. tmp = cipher.doFinal(content, offset, len - offset);
27. }
28. //将临时结果保存到内存缓冲区里
29. baos.write(tmp);
30. offset = offset + blockSize;
31. }
32. baos.close();
33. return baos.toByteArray();
34. }

非对称加密用途

1,身份认证
一条加密信息若能用A 的公钥能解开,则该信息一定是用A 的私钥加密的,该能确定该用户是A。

Paste_Image.png
2,陌生人通信
A 和B 两个人互不认识,A 把自己的公钥发给B,B 也把自己的公钥发给A,则双方可以通过对方的公钥加密信息通信。C 虽然也能得到A、B 的公钥,但是他解不开密文。 Paste_Image.png
3,秘钥交换
A 先得到B 的公钥,然后A 生成一个随机秘钥,例如13245768,之后A 用B 的公钥加密该秘钥,得到加密后的秘钥,例如d#@$12sd,之后将该密文发给B,B 用自己的私钥解密得到123456,之后双方使用13245768 作为对称加密的秘钥通信。C 就算截获加密后的秘钥d#@$12*asd,自己也解不开,这样A、B 二人能通过对称加密进行通信。 Paste_Image.png

总结

非对称加密一般不会单独拿来使用,他并不是为了取代对称加密而出现的,非对称加密速度比对称加密慢很多,极端情况下会慢1000 倍,所以一般不会用来加密大量数据,通常我们经常会将对称加密和非对称加密两种技术联合起来使用,例如用非对称加密来给对称加密里的秘钥进行加密(即秘钥交换).

相关文章

  • 第四篇:非对称加密及RSA加密算法

    目录一、非对称加密 1、什么是非对称加密? 2、对称加密的工作过程 3、非对称加密的优点 4、非对称加密的不足二、...

  • https交互流程简述

    https使用到的加密算法 对称加密非对称加密 通过非对称加密,交换对称加密的密钥,之后采用对称加密传输非对称加密...

  • ios开发之证书和签名机制(一)

    非对称加密和摘要 1、非对称加密的特性和用法 1) 非对称加密算法(RSA):非对称加密算法指加密秘钥和解密秘钥是...

  • 学习笔记:HTTPS协议原理

    对称加密和非对称加密 加密分两种,对称加密和非对称加密。对称加密是指加密的双方使用同一个密钥加密和解密数据。非对称...

  • iOS逆向攻防之HASH,数字签名,对称加密算法

    在密码学中,加密部分主要分为对称加密和非对称加密,非对称加密主要有RSA非对称加密(使用公钥/私钥来加密解密),对...

  • iOS逆向攻防之HASH,数字签名,对称加密算法

    在密码学中,加密部分主要分为对称加密和非对称加密,非对称加密主要有RSA非对称加密(使用公钥/私钥来加密解密),对...

  • Https加密原理图解

    1. 为什么要用对称加密+非对称加密? 结合对称加密的快和非对称加密的安全。 2. 为什么不能只用非对称加密? 如...

  • kotlin版本RSA非对称加密解密与分段加密解密

    基于kotlin语言的RSA非对称加密解密与分段加密解密 RSA非对称加密 RSA非对称加密的具体算法与来源我就不...

  • 4-对称加密

    对称加密与非对称加密 按照密钥的特征不同, 密码体制分为对称密码体制和非对称密码体制。对称加密和非对称加密都是可逆...

  • 3.1 非对称加密简介

    非对称加密技术介绍 对称加密技术被称为初等加密技术,非对称加密技术即为高级数据加密技术,安全性更高。非对称加密算法...

网友评论

      本文标题:非对称加密

      本文链接:https://www.haomeiwen.com/subject/qzvytxtx.html