Java AES算法是属于高级加密标准,它是一种对称加密算法,AES加密被美国用于保护敏感但未分类的资料,所以我们可以说它是足够安全的,AES加密解密算法应用场景也比较广泛,比如我们可以用于加密api接口返回或请求的数据,这样即使我们的app被人抓包了,也不可能知道我们接口请求或返回的Json数据是什么。
什么是对称加密算法呢?
对称加密算法是比较常见的加密算法,使用一个key密钥加密或解密字符串,正是因为它的加密解密都是使用的同一个Key密钥,只要别人不知道你加密的Key密钥,它就很难破解你所加密的JSON数据,就算知道了你明文的key密钥,如果你对key密钥进行了二次封装,对方也不可能破解得了你的json数据,所以AES加密解密算法还是比较安全的。
小编对明文key密钥进行了二次封装,先是将“www.tpyyes.com”明文密钥进行md5加密,然后使用SecretKeySpec对象对md5密钥进行了封装,使用了AES算法,这样就生成了一个非字符串类型的密钥,别人就很难知道你的密钥内容了。
如下是小编在Api接口开发中常常使用到的AES加密解密算法的示例:
package english; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AesDemo { //测试 public static void main(String[] args) { //明文密钥 final String secretKey = "www.tpyyes.com"; //需要加密的字符串 String str = "Hello world!"; //加密 String encryptedStr = encryptStr(str, secretKey); //解密 String decryptedStr = decryptStr(encryptedStr, secretKey); //输出加密后字符串 System.out.println(encryptedStr); //输出解密后字符串 System.out.println(decryptedStr); } //对明文密钥进行二次封装,生成最终密钥 public static SecretKeySpec setKey(String keyStr) throws NoSuchAlgorithmException{ //先MD5加密 MessageDigest md = MessageDigest.getInstance("MD5"); byte[] arr = md.digest(keyStr.getBytes()); SecretKeySpec resultKey = new SecretKeySpec(arr,"AES"); return resultKey; } //字符串加密 public static String encryptStr(String strToEncrypt, String secret) { try { SecretKeySpec md5key = setKey(secret); //创建密码器 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, md5key); return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); } catch (Exception e) { System.out.println("加密错误:" + e.toString()); } return null; } //字符串解密 public static String decryptStr(String strToDecrypt, String secret) { try { SecretKeySpec md5key = setKey(secret); //创建密码器 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); cipher.init(Cipher.DECRYPT_MODE, md5key); return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); } catch (Exception e) { System.out.println("解密错误:" + e.toString()); } return null; } }
加密解密后:
LT4sV++1vF1oWNnxU4lTAg== Hello world!
Java AES算法加密解密Json字符串数据,我认为是一个非常好的防止app抓包的方法,如果您有更好的方法,请在下方留言告知。