手机号证件号等加密方案
思路:前端通过判断是否存在【】来替换掉加密内容,比如手机号实际为180【加密串】0000,页面显示为180****0000。
package util;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @description: 对证件号等加密解密* @author: ShiHuaHao**/
public class NumEncryptionUtil {/*** 证件号加密* @param content* @return*/public static String cardNumEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}content = cardNumProcess(content);//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() >= 4) {String front = content.substring(0, content.length() - 4);String after = content.substring(content.length() - 4);return "【" + AesUtil.AESEncode(front) + "】" + after;} else {return "【" + AesUtil.AESEncode(content) + "】";}}/*** 证件号解密* @param content* @return*/public static String cardNumDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return cardNumProcess(content);}String frontEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = "";if (content.length() > content.indexOf("】") + 1) {after = content.substring(content.indexOf("】") + 1);}String cardNum = AesUtil.AESDncode(frontEncode) + after;return cardNumProcess(cardNum);}private static String cardNumProcess(String content) {String cardNum = "";if (content != null) {Pattern p = Pattern.compile("\\s*|\t|\r|\n");Matcher m = p.matcher(content);cardNum = m.replaceAll("");}return cardNum.trim();}/*** 电话号加密(小于8位全加密)* @param content* @return*/public static String phoneEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() < 8) {// 如果是非法,则不保存return content;}String front = content.substring(0, 3);String in = content.substring(3, content.length() - 4);String after = content.substring(content.length() - 4);return front + "【" + AesUtil.AESEncode(in) + "】" + after;}/*** 电话号解密* @param content* @return*/public static String phoneDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String front = content.split("【")[0];String inEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.split("】").length < 2 ? "" : content.split("】")[1];return front + AesUtil.AESDncode(inEncode) + after;}/*** 邮箱加密* @param content* @return*/public static String emailEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.lastIndexOf("@") < 0) {return null; // 如果是非法,则不保存}String front = content.substring(0, content.lastIndexOf("@"));String after = content.substring(content.lastIndexOf("@"));return "【" + AesUtil.AESEncode(front) + "】" + after;}/*** 邮箱解密* @param content* @return*/public static String emailDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String frontEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.substring(content.indexOf("】") + 1);return AesUtil.AESDncode(frontEncode) + after;}/*** 银行卡号加密(小于8位全加密)* @param content* @return*/public static String bankCardEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() < 8) {// 如果是非法,则不保存return null;}String front = content.substring(0, 4);String in = content.substring(4, content.length() - 4);String after = content.substring(content.length() - 4);return front + "【" + AesUtil.AESEncode(in) + "】" + after;}/*** 银行卡号解密* @param content* @return*/public static String bankCardDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String front = content.split("【")[0];String inEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.split("】").length < 2 ? "" : content.split("】")[1];return front + AesUtil.AESDncode(inEncode) + after;}/*** 全文加密加密* @param content* @return*/public static String fullTextEncode(String content) {return BeeBase64.encode(content.getBytes());}/*** 全文加密解密* @param content* @return*/public static String fullTextDncode(String content) throws Exception {return BeeBase64.decode(content);}
手机号证件号等加密方案相关推荐
- hive sql 实现姓名手机号证件号脱敏
需求描述 姓名 中文姓名 2个字码最后一个字 大于等于3个字,只留第一个和最后一个字 英文姓名 保留第一个和最后一个字符 例如 Jack.Antg 脱敏后变成J***.***g 手机号 11位 则保留 ...
- c#加密证件号的中间部分,改为*号
前言 使用场景:在我项目中,我需要给前端提供接口,所以我要吧证件号进行加密.例如:411421199510225612,这是一个身份证号,18为的,那么我加密完成之后就会是 411421******* ...
- java中对数据进行脱敏操作(证件号,手机号,移动电话,邮箱)
**敏感信息处理包括: /*要考虑到证件号是否为身份证号或者学生证,因为数字位数不同全部按身份证的方式托面,第三位至最后四位都进行脱敏操作*/1.证件号非空时第3位到第14位显示时以*号代替2.移动电 ...
- 发送短信验证码时间控制,手机号校验,证件号校验
//发送验证码 var countdown=60; function sendmsg(){ timeset(); function timeset(){ ...
- 前后端分离API接口如何加密 —— AES加密方案
场景还原:页面中需要展示手机号,身份证号,因为是前后端分离,所有接口API地址有可能暴露,这样不怀好意的人可以拿到个人敏感信息 解决方案: 1. 敏感信息加掩码,例如:接口返回130**12这样的手机 ...
- 德云社怒怼信息泄露 300元买600多明星证件号
德云社微博发布声明书谴责信息买卖. 微博上明星行程动态"超话". 一位信息贩子的朋友圈截图. 德云社怒怼信息泄露 300元买600多明星证件号 "每天都会接到各种骚扰电话 ...
- 微信小程序获取绑定授权用户手机号getPhoneNumber-全流程及手机号带*号问题
微信小程序获取微信绑定授权手机号getPhoneNumber全流程及出现手机号带*号问题详解 微信小程序文档中给出如下示例 获取微信用户绑定的手机号,需先调用login接口. 因为需要用户主动触发才能 ...
- 企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明
本文包含了企业号回调企业时加解密的详细方案.库和示例代码的下载,以及企业号api接口返回的错误码. 一.关于加解密方案的详细说明 1.术语及说明 开启回调模式时,有以下术语需要了解: 1)msg_si ...
- ET199加密方案——文件MD5校验
ET199(http://www.jansh.com.cn/product/detail.php?cid=13)采用安全强度最高的智能卡芯片,硬件不能被复制,多重安全级别,并且集成了16位CPU,8K ...
最新文章
- FPGA之道(27)VHDL的操作符号
- 玩转虚拟化VMWare之一: VMWare ESXi 5.0和vSphere Client安装和配置
- vue单选,多选,多选的内容显示在页面可删除
- [loj556][Antileaf's Round]咱们去烧菜吧
- “not a single-group group function”
- lingo纳什均衡代码_数学建模练习题.
- vb adodc连接mysql_VB中用ADODC控件连接ACCESS数据库
- 不确定性推理——主观贝叶斯方法matlab实现
- 常见关系型数据库(sql server/oracle)查询语句面试题
- MATLAB编写m函数理解 y=f(g(x))*h(x)
- 864. 二维数组区块计数
- python微信刷票代码_微信刷票漏洞详解,Python脚本实现一秒破万!
- [C#]Windows服务程序[转载西门吹雪的好文章]
- Deep Pyramidal Residual Networks for Spectral-Spatial HSIs Classification(2019)——深度学习论文笔记(二)
- 升级光伏供应链体系,供应商系统规范供应商管理,促进企业与供应商高效协同
- phpcms v9 二次开发 前台上传图片
- 【论文阅读第一期】Goods:Organizing Google’s Datasets总结
- 如何使用计算机备用内存,怎样解决emwin7/em备用存储空间占用高-win7 内存占用高,电脑物理内存占用90...
- 如何让店铺快速靠前排名
- setContentView(R.layout.main)在Android里面,这句话是什么意思?