Android安全加密:非对称加密

澳门新葡亰3522平台游戏 1

Android安全加密专题文章索引

  1. Android安全加密:对称加密
  2. Android安全加密:非对称加密
  3. Android安全加密:消息摘要Message
    Digest
  4. Android安全加密:数字签名和数字证书
  5. Android安全加密:Https编程

以上学习所有内容,对称加密、非对称加密、消息摘要、数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识。数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https
协议的安全通讯机制。最终才能在SSL 开发过程中得心应手。

另外,对称加密和消息摘要这两个知识点是可以单独拿来使用的。

知识点串联:

数字证书使用到了以上学习的所有知识

  • 对称加密与非对称加密结合使用实现了秘钥交换,之后通信双方使用该秘钥进行对称加密通信。
  • 消息摘要与非对称加密实现了数字签名,根证书机构对目标证书进行签名,在校验的时候,根证书用公钥对其进行校验。若校验成功,则说明该证书是受信任的。
  • Keytool
    工具可以创建证书,之后交给根证书机构认证后直接使用自签名证书,还可以输出证书的RFC格式信息等。
  • 数字签名技术实现了身份认证与数据完整性保证。
  • 加密技术保证了数据的保密性,消息摘要算法保证了数据的完整性,对称加密的高效保证了数据处理的可靠性,数字签名技术保证了操作的不可否认性。

通过以上内容的学习,我们要能掌握以下知识点:

  • 基础知识:bit 位、字节、字符、字符编码、进制转换、io
  • 知道怎样在实际开发里怎样使用对称加密解决问题
  • 知道对称加密、非对称加密、消息摘要、数字签名、数字证书是为了解决什么问题而出现的
  • 了解SSL 通讯流程
  • 实际开发里怎样请求Https 的接口

澳门新葡亰3522平台游戏,Android安全加密专题文章索引

  1. Android安全加密:对称加密
  2. Android安全加密:非对称加密
  3. Android安全加密:消息摘要Message
    Digest
  4. Android安全加密:数字签名和数字证书
  5. Android安全加密:Https编程

1. 介绍

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

简单理解为:加密和解密是不同的钥匙

澳门新葡亰3522平台游戏 1

1. 介绍

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

简单理解为:加密和解密是不同的钥匙

这里写图片描述

2. 常见算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,其中支付宝使用的就是RSA算法

2. 常见算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等,其中支付宝使用的就是RSA算法

3. RSA 算法原理

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

3. RSA 算法原理

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

4. 使用步骤

//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(content.getBytes());
//使用私钥初始化密码器
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//执行解密操作
byte[] deResult = cipher.doFinal(result);

4. 使用步骤

//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(content.getBytes());
//使用私钥初始化密码器
cipher.init(Cipher.DECRYPT_MODE, privateKey);
//执行解密操作
byte[] deResult = cipher.doFinal(result);

5. 注意点

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

5. 注意点

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