前后端分离API接口如何加密 |
您所在的位置:网站首页 › python如何加密手机号 › 前后端分离API接口如何加密 |
场景还原:页面中需要展示手机号,身份证号,因为是前后端分离,所有接口API地址有可能暴露,这样不怀好意的人可以拿到个人敏感信息 解决方案: 1. 敏感信息加掩码,例如:接口返回130**12这样的手机号。弊端:在有表单中无法实现这种方案。 2. 后端加密,前端解密的方式(本文采用的方式),前后端统一加密方案,salt字符串等信息。弊端:前端js无法做到高级加密,salt可以被查到,但是成本相对较高。 后台加密工具类 package org.jeecg.modules.system.util; import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class AesUtils { private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding"; /** * 加密 * * @param content * @param key * @return */ 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(ALGORITHMSTR); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 cipher.init(Cipher.ENCRYPT_MODE, skey); //获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码 byte[] byte_content = content.getBytes("utf-8"); //密码器加密数据 byte[] encode_content = cipher.doFinal(byte_content); //将加密后的数据转换为字符串返回 return Base64.encodeBase64String(encode_content); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 解密 * * @param encryptStr * @param decryptKey * @return */ 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(ALGORITHMSTR); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 cipher.init(Cipher.DECRYPT_MODE, skey); //把密文字符串转回密文字节数组 byte[] encode_content = Base64.decodeBase64(encryptStr); //密码器解密数据 byte[] byte_content = cipher.doFinal(encode_content); //将解密后的数据转换为字符串返回 return new String(byte_content, "utf-8"); } catch (Exception e) { e.printStackTrace(); return null; } } }
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |