前后端分离API接口如何加密

您所在的位置:网站首页 python如何加密手机号 前后端分离API接口如何加密

前后端分离API接口如何加密

#前后端分离API接口如何加密 | 来源: 网络整理| 查看: 265

场景还原:页面中需要展示手机号,身份证号,因为是前后端分离,所有接口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; } } }

在这里插入图片描述 在这里插入图片描述

前端解密

在这里插入图片描述在这里插入图片描述

{ title: '联系方式', align: 'center', width:100, dataIndex: 'phone', customRender: function(phone,record) { const key = CryptoJS.enc.Utf8.parse(record.key); let tel = CryptoJS.AES.decrypt(phone,key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); tel = tel.toString(CryptoJS.enc.Utf8) return tel; } },


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3