对称加密与非对称加密

加密

对称加密
image.png
  • 对称双方使用同一个密钥,使用加密算法配上合适的密钥来加密,解密时使用加密过程的完全逆过程配合密钥来进行解密
  • 经典算法:DES,AES
  • 优点:加密计算小,速度快,适合对大量数据进行加密的场景
  • 缺点:密钥传输泄露问题
栗子:AES
  • AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。
AES加密
public static String encrypt(String text) throws Exception {
    // 私钥 AES固定格式为128/192/256bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。
    String key = "aaaaaaaaaaaaaaaa";
    // 初始化向量参数,AES 为16bytes. DES 为8bytes
    String iv ="bbbbbbbbbbbbbbbb"; 
    // 两个参数,第一个为私钥字节数组, 第二个为加密方式AES或者DES
    Key keySpec = new SecretKeySpec(key.getBytes(), "AES"); 
    IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
    // 实例化加密类,参数为加密方式,要写全
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    // 初始化,此方法可以采用三种方式,按服务器要求来添加。(1)无第三个参数(2)第三个参数为SecureRandom
    //(3)采用此代码中的IVParameterSpec
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);// random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)
    // cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    // SecureRandom random = new SecureRandom();
    // cipher.init(Cipher.ENCRYPT_MODE, keySpec, random);
    byte[] bytes = cipher.doFinal(text.getBytes());// 加密操作,返回加密后的字节数组,然后需要编码。主要编解码方式有Base64, HEX, UUE,
    // 7bit等等。此处看服务器需要什么编码方式
    String result = Base64.encodeToString(bytes, Base64.DEFAULT);
    return result;}
AES解密
public static String decrypt(String text) throws Exception {
    String keySpec = "aaaaaaaaaaaaaaaa";
    String iv = "bbbbbbbbbbbbbbbb";
    byte[] textBytes = Base64.decode(text.getBytes(), Base64.DEFAULT);
    IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
    Key key = new SecretKeySpec(keySpec.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, key, ivSpec); // 与加密时不同MODE:Cipher.DECRYPT_MODE
    String result = cipher.doFinal(textBytes);
    return result; }
非对称加密
  • 原理:使用公钥对数据进行加密得到密文;使用私钥解密得到明文
image.png

应用场景:

1.数字签名验证
使用私钥签名,发送签名数据和原数据,采用公钥验证,如果验证后数据等于发过来的原数据则正确,反之

image.png

加密签名:发送方使用对方公钥加密得到密文,在自己的私钥签名,接收方使用自己的私钥解密,用公钥验证

image.png
  • 经典算法: RSA,DSA
BASE64
  • 将二进制数据转换成由64个字符组成的字符串编码算法
  • 用途:让原数据具有字符串所具有的的特性,如可以放在URL中传输,可以保存到文本文件,可以通过普通的聊天软件进行文本传输
  • 把原本人眼可以读懂的字符串变成读不懂的字符串,降低偷窥风险
压缩与解压缩
  • 压缩:把数据换一种方式来存储,以减少存储空间
  • 解压缩:把压缩后的数据还原成原先的数据,以便使用
  • 常见压缩算法:MP3,JEPG,DEELATE

HASH

  • 定义:把任意数据转换成指定大小的范围(通常很小)的数据

  • 左右:摘要,数字指纹

  • 经典算法:MD5,SHA1,SHA256

  • 实质用途

    • 数据完整性验证
    • 快速查找
    • 隐私保护
加上hash减小签名数据

你可能感兴趣的:(对称加密与非对称加密)