前端加密,后端解密 用户密码的加密解密操作( 二 )


这样就被加密了 。
是不是很简单?是不是很easy?哈哈哈
后端实现
后端采用的是 Boot框架 , 基于Java实现
java后端使用的是javax.包 , 所以不用引依赖 。
直接编写加密解密工具类 , java类代码如下:
package cn.com.wasec.gd_plice.utils;import lombok.extern.slf4j.Slf4j;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import java.nio.charset.StandardCharsets;/*** 登陆密码加密*/@Slf4jpublic class AesUtil {private static final String ALGORITHMS = "AES/ECB/PKCS5Padding";/*** 加密** @param content 内容* @param keykey* @return java.lang.String*/public static String encrypt(String content, String key) {try {//获得密码的字节数组byte[] raw = key.getBytes();//根据密码生成AES密钥SecretKeySpec skey = new SecretKeySpec(raw, "AES");//根据指定算法ALGORITHM自成密码器Cipher cipher = Cipher.getInstance(ALGORITHMS);//初始化密码器 , 第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作 , 第二个参数为生成的AES密钥cipher.init(Cipher.ENCRYPT_MODE, skey);//获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码byte[] byteContent = content.getBytes(StandardCharsets.UTF_8);//密码器加密数据byte[] encodeContent = cipher.doFinal(byteContent);//将加密后的数据转换为字符串返回return Base64.encodeBase64String(encodeContent);} catch (Exception e) {e.printStackTrace();return null;}}/*** 解密** @param encryptStr 加密后的内容* @param decryptKey 解密key* @return java.lang.String*/public static String decrypt(String encryptStr, String decryptKey) {try {//获得密码的字节数组byte[] raw = decryptKey.getBytes();//根据密码生成AES密钥SecretKeySpec skey = new SecretKeySpec(raw, "AES");//根据指定算法ALGORITHM自成密码器Cipher cipher = Cipher.getInstance(ALGORITHMS);//初始化密码器 , 第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作 , 第二个参数为生成的AES密钥cipher.init(Cipher.DECRYPT_MODE, skey);//把密文字符串转回密文字节数组byte[] encodeContent = Base64.decodeBase64(encryptStr);//密码器解密数据byte[] byteContent = cipher.doFinal(encodeContent);//将解密后的数据转换为字符串返回return new String(byteContent, StandardCharsets.UTF_8);} catch (Exception e) {log.error("String : {} aes decrypt error", encryptStr);return null;}}}
直接调用静态方法
String passWord= AesUtil.decrypt(loginDTO.getPassword(),"XXXXXXXXXXXXXX");
至此 , 后端实现结束 。
3、总结
总之 , 加密和解密在实际业务中还是很必要的 , 而选择哪样的方式加密自己斟酌 。
另外 , 以上例子中其实存在些许问题 , 例如秘钥写死在前端代码中 , 这样其实别人是可以通过抓取你的js文件进行分析获取的 , 建议通过后端获取 。
如果对安全要求更高的话 , 还是建议使用https吧