|
| 1 | +- 对称加密,加密方和解密方持有相同的私钥,应用场景为一般情况下的一对一加密 |
| 2 | +- 非对称加密,加密方持有公钥,对消息进行加密,解密方持有私钥,只有该私钥可以解密小心,应用场景多为一对多的,以防止对称加密时解密方持有相同密钥而引发的密钥泄漏风险 |
| 3 | + |
| 4 | +AES 和 DES 都为对称加密 |
| 5 | + |
| 6 | +#### SHA256 |
| 7 | +```java |
| 8 | +String contentNeedToBeEncrypted = "contentNeedToBeEncrypted"; |
| 9 | +MessageDigest md = MessageDigest.getInstance("SHA-256"); |
| 10 | +byte[] sign = md.digest(contentNeedToBeEncrypted.getBytes()); |
| 11 | + |
| 12 | +//转换成16进制 |
| 13 | +StringBuffer hexString = new StringBuffer(); |
| 14 | +for (int i = 0; i < sign.length; i++) { |
| 15 | + String hex = Integer.toHexString(0xff & sign[i]); |
| 16 | + if (hex.length() == 1) |
| 17 | + hexString.append('0'); |
| 18 | + hexString.append(hex); |
| 19 | +} |
| 20 | +``` |
| 21 | + |
| 22 | +#### AES 对称加密 |
| 23 | +```java |
| 24 | +String contentNeedToBeEncrypted = "contentNeedToBeEncrypted"; |
| 25 | +String key = "aabbccddeeffgghh";//private key |
| 26 | +String iv = "aabbccddeeffgghh";//偏移量,可以设置成和私钥为同一个值 |
| 27 | +Key keySpec = new SecretKeySpec(key.getBytes(), "AES"); |
| 28 | + |
| 29 | +//加密 |
| 30 | +Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); |
| 31 | +IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes()); |
| 32 | +cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); |
| 33 | +byte [] b = cipher.doFinal(params.getBytes()); |
| 34 | +String result = Base64.encodeBytes(b); |
| 35 | + |
| 36 | +//解密 |
| 37 | +String contentNeedToBeDecrypted = "contentNeedToBeDecrypted"; |
| 38 | +Cipher cipher1 = Cipher.getInstance("AES/CBC/PKCS5PADDING"); |
| 39 | +IvParameterSpec ivSpec1 = new IvParameterSpec(iv.getBytes()); |
| 40 | +byte [] bytes = Base64.decode(contentNeedToBeDecrypted); |
| 41 | +cipher1.init(Cipher.DECRYPT_MODE, keySpec, ivSpec1); |
| 42 | +byte [] retB = cipher1.doFinal(bytes); |
| 43 | +System.out.println(new String(retB, "utf-8")); |
| 44 | +``` |
0 commit comments