对称加密与非对称加密

2019-10-23  本文已影响0人  大佬的上半生

加密

对称加密
image.png
栗子:AES
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
BASE64
压缩与解压缩

HASH

加上hash减小签名数据
上一篇 下一篇

猜你喜欢

热点阅读