利用AES算法可以用来加密和解密数据。使用时需要注意两点:1)加密字符串越长,加密字符串越长。注意数据库字段的设计;2)在Linux和Windows环境下,可能存在环境差异导致在Windows下测试成功,但在Linux上无法正确解密加密字符串。以下算法均经过真实环境测试,应用也要经过二次验证,避免上线意外。复制代码privatestaticfinalStringALGORITHM_NAME="AES"; //加密系数,可以自定义StringRANDOM_KEY_ALGORITHM_PROVIDER="SUN";/***AES加密*@paramcontent需要加密的内容,为空则为空*@returnbase64格式加密后的结果,如果出现异常,返回null*/publicstaticStringencrypt(Stringcontent){if(StringUtils.isEmpty(content)){returnnull;}尝试{KeyGeneratorkeyGenerator=KeyGenerator.getInstance(ALGORITHM_NAME);SecureRandomsecureRandom=SecureRandom.getInstance(RANDOM_KEY_ALGORITHM,RANDOM_KEY_ALGORITHM_PROVIDER);secureRandom.setSeed(DEFAULT_ENCRYPT_RULE.getBytes());keyGenerator.init(128,secureRandom);SecretKeyoriginalKey=keyGenerator.generateKey();SecretKeysecretKey=newSecretKeySpec(originalKey.getEncoded(),ALGORITHM_姓名);密码cipher=Cipher.getInstance(ALGORITHM_NAME);cipher.init(Cipher.ENCRYPT_MODE,secretKey);byte[]encrypted=cipher.doFinal(content.getBytes("utf-8"));Stringresult=newString(Base64.getEncoder().encodeToString(encrypted));返回结果;}catch(Exceptione){logger.error(e.getMessage(),e);返回空值;}}/***解密*@paramencryptedbase64格式的加密密文*@return解密后的原文,异常时返回null*/publicstaticStringdecrypt(Stringencrypted){if(StringUtils.isEmpty(encrypted)){返回空值;}尝试{KeyGeneratorkeyGenerator=KeyGenerator.getInstance(ALGORITHM_NAME);SecureRandomsecureRandom=SecureRandom.getInstance(RANDOM_KEY_ALGORITHM,RANDOM_KEY_ALGORITHM_PROVIDER);secureRandom.setSeed(DEFAULT_ENCRYPT_RULE.getBytes());keyGenerator.init(128,secureRandom);SecretKeyoriginalKey=keyGenerator.generateKey();硒cretKeysecretKey=newSecretKeySpec(originalKey.getEncoded(),ALGORITHM_NAME);密码cipher=Cipher.getInstance(ALGORITHM_NAME);cipher.init(Cipher.DECRYPT_MODE,secretKey);byte[]decrypted=cipher.doFinal(Base64.getDecoder().decode(encrypted));返回新字符串(已解密,“utf-8”);}catch(Exceptione){logger.error(e.getMessage(),e);返回空值;
