数字加密在项目中时常会遇到,如手机号,身份证号信息等,下面小白将自己手写的数字加密算法分享给大家,可在项目中直接运用.
加密规则,入参时传递一个字段时间戳 time:
* 1.以字母代替数字,0-9分别为["D","e","C","A","#","b","J","I","z","M"]
* 2.混淆字母为FxYNgq;
* 3.加密字符串等于初始数字加时间戳乘以数字密钥(5658116)再把数字结果转换成字母;
* 4.对于加密字符串长度小于总加密字符串长度(32)的随机插入混淆字母
例:(15755141030 + 1544769549545)*5658116=8829629720137456700-->再转换成字母 qFzzYFCMJYqCMgICDNxFeAqI#bJgIFDD;
package com.example.demo.t2;
import java.util.regex.Pattern; /**
* Created by ypf on 2018/12/14.
*/
public class Test { //数字秘钥
private final static long SECRET_KEY = 5658116;
//转换字符(0-9分别为["D","e","C","A","#","b","J","I","z","M"]
private final static String CONVERT_KEY = "DeCA#bJIzM";
//混淆字母
private final static String CONFUSED_WORDS_KEY = "FxYNgq";
//总加密字符串长度
private final static int LEN_KEY = 32; /**
* 数字加密算法
**/
public String encrypt(String str,long time){ //数字校验
if(!isNumber(str)){
System.out.println(str + "不是数字");
return null;
} long number = Long.parseLong(str);
long newNumber = (number + time) * SECRET_KEY;
String[] numArr = String.valueOf(newNumber).split("");
String[] initArr = CONVERT_KEY.split("");
int len = numArr.length;
StringBuffer buffer = new StringBuffer(); //数字转字母
for(int i = 0; i < len; i++){
int inx = Integer.parseInt(numArr[i]);
buffer.append(initArr[inx]);
} //随机加入混淆字符
String[] cwkArr = CONFUSED_WORDS_KEY.split("");
if(len < LEN_KEY){
int l = LEN_KEY - len;
for(int i = 0; i < l; i++){
int index = (int)(Math.random()*buffer.length());
int inx = (int)(Math.random()*(CONFUSED_WORDS_KEY.length()));
buffer.insert(index,cwkArr[inx]);
}
}
String result = buffer.toString();
System.out.println("加密字符串:" + result);
return result;
} /**
* 解密算法
* */
public String decrypt(String str,long time){
if(null == str || "".equals(str)){
System.out.println("参数为空");
return null;
}
int l = CONFUSED_WORDS_KEY.length();
String[] cwkArr = CONFUSED_WORDS_KEY.split("");
for(int i = 0; i < l; i++){
str = str.replaceAll(cwkArr[i],"");
}
String[] initArr = str.split("");
int len = initArr.length;
StringBuffer result = new StringBuffer();
for(int i = 0; i < len; i++ ){
int k = CONVERT_KEY.indexOf(initArr[i]);
if(k == -1){
System.out.println("转化失败:" + str);
return null;
}
result.append(k);
}
Long number;
try {
long total = Long.parseLong(result.toString());
long sum = total/SECRET_KEY;
number = sum - time;
System.out.println("解密后数字:" + number);
} catch (NumberFormatException e) {
e.printStackTrace();
return null;
}
return number.toString();
} /**
* 测试
**/
public static void main(String[] args) {
long time = System.currentTimeMillis();
System.out.println("time:" + time);
Test t = new Test();
String number = "15755141030";
System.out.println(number);
String result = t.encrypt(number,time);
t.decrypt(result,time);
} /**
* 数字校验
* */
public static boolean isNumber(String value) {
String pattern = "^[0-9]*[1-9][0-9]*$";
boolean isMatch = Pattern.matches(pattern, value);
return isMatch;
}
}
运行结果如下:
Connected to the target VM, address: '127.0.0.1:62962', transport: 'socket'
time:1544769549545
15755141030
加密字符串:qFzzYFCMJYqCMgICDNxFeAqI#bJgIFDD
解密后数字:15755141030
Disconnected from the target VM, address: '127.0.0.1:62962', transport: 'socket' Process finished with exit code 0

总结:此加密算法虽然简单,但加密思想和加密原理值得学习,可以随意修改数字秘钥、转换字符、混淆字母、总加密字符串长度,并用于项目中。

java数字加密算法的更多相关文章

  1. Java数字格式化输出时前面补0

    Java数字格式化输出时前面补0 星期日 2014年11月30日|  分类: Java     /** * 里数字转字符串前面自动补0的实现. * */ public class TestString ...

  2. java HMAC_SHA1加密算法

      java HMAC_SHA1加密算法 CreationTime--2018年7月14日16点46分 Author:Marydon 1.准备工作 import javax.crypto.Mac; i ...

  3. java sm3加密算法

      java sm3加密算法实现 CreationTime--2018年7月13日09点28分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59.ja ...

  4. java单向加密算法小结(1)--Base64算法

    从这一篇起整理一下常见的加密算法以及在java中使用的demo,首先从最简单的开始. 简单了解 Base64严格来说并不是一种加密算法,而是一种编码/解码的实现方式. 我们都知道,数据在计算机网络之间 ...

  5. java基本加密算法

    简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...

  6. JAVA 上加密算法的实现用例---转载

    通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快,破译极其困难.本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman 的使用. 第 1 章基础知识 ...

  7. Java中加密算法介绍及其实现

    1.Base64编码算法 Base64简介 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RF ...

  8. JAVA 上加密算法的实现用例,MessageDigest介绍

    第 1 章基础知识 1.1. 单钥密码体制 单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密. 通常 , 使用的加密算法 比较简便高效 , 密钥简短,加解密速度快 ...

  9. java常用加密算法

    常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 日期:2014/6/1 文:阿蜜果 1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安 ...

随机推荐

  1. vue.js(1)--创建vue实例的基本结构

    vue实例基本结构与MVVM框架 (1)vue实例基本结构 <!DOCTYPE html> <html lang="en"> <head> &l ...

  2. setInterval 定时器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. vue+hbuilder 打包成移动app

    查看了很多网上写的改来改去都在手机上运行不起来,运行起来又是白屏:最后放弃,自己结合文档搞吧! 1. 项目目录下的config文件夹里的index.js文件中,将build对象下的assetsPubl ...

  4. mybatis捕获sql工具

    今天给大家分享一款好用的软件 https://ssrss.space/register?aff=982689 日志级别必须是debug

  5. 基于SOA的图书商城系统分析

    1.1什么是SOA架构? SOA( Service Oriented Architecture)是一种面向服务的分布式架构,将每个实现特定功能的工程拆分为服务层和表现层.服务层负责处理业务逻辑,对外提 ...

  6. java数据结构复习01

    1.数组 package javaDataStruct.array01; public class MyArray { private int[] arr; // 表示有效数据的长度 private ...

  7. SCC统计

    Kosoraju SCC总数及记录SCC所需要的最少边情况 #include<cstdio> ; ; ][N], nxt[][N], v[][N], ed, q[N], t, vis[N] ...

  8. CPU、CPU核与线程的关系

    CPU相关概念: CPU:独立的中央处理单元,体现在主板上是有多个CPU的插槽. CPU cores:在每一个CPU上,都可能有多个核(core),每一个核中都有独立的一套ALU.FPU.Cache等 ...

  9. api权限管理系统与前后端分离实践

    https://segmentfault.com/a/1190000014368885

  10. [SpringBoot] 通过spring.factory文件来加载第三方的bean

        在springboot的开发过程中,我们经常需要加载一些bean,如果bean使我们自己写的类,那很好办,加个@Component注解就搞定了,然后过程启动会扫描启动类所在的包及其子包,如果我 ...