String setKey = "anhuimohe5201314";String iv = "ANHUIMOHE5201314";String password = "";//2. 校验用户名或密码是否正确// 将16进制字符串转换为字节数组byte[] bytes = hexStringToByteArray(appLoginModel.getPassword());// 使用Base64编码字节数组String base64String = java.util.Base64.getEncoder().encodeToString(bytes);try {IvParameterSpec ivBytes = new IvParameterSpec(iv.getBytes(StandardCharsets.UTF_8));SecretKeySpec secretKeySpec = new SecretKeySpec(setKey.getBytes(StandardCharsets.UTF_8),"AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivBytes);byte[] decryptedText = cipher.doFinal(java.util.Base64.getDecoder().decode(base64String));password = new String(decryptedText);} catch (Exception e) {e.printStackTrace();}
我们在登陆时,为了保证数据的私密性我们会对接口接口返回的数据进行加密以起到保护账号密码的作用,这里博主我选择了AES加密;接下来分享几点我在和前端合作使用AES加密时遇到的问题和注意事项:
1:AES加密时需要使用到3个参数:
password:密码,
setKey:key值密钥(密钥的设定必须前后端一致且AES的秘钥字节为十六进制字符串)
iv:偏移量(偏移量的设定必须前后端一致且AES的偏移量字节为十六进制字符串)
2:前后端的选择加解密的类型必须是一致的(都是AES,或者是其他类型但必须保持一致)
3:后端在对前端拿的数据进行解密时,前端传的数据可能会是16进制字符串,这里我们需要先转成byte[]字节再进行
解密:byte[] bytes = hexStringToByteArray(appLoginModel.getPassword());