128进制加密数据示例分享
128进制加密数据,可以自定符号表,使用自己喜欢的符号做加密
packagecom.wmly.enc;
importjava.util.HashMap;
/**
*128进制加解密,一个符号可表示7个bit
*可以自定义符号表,符号不能重复
*/
publicclassMyBASE128{
publicstaticfinalchar[]symbolTable=newchar[128];
publicstaticfinalHashMap<Character,Integer>indexTable=newHashMap<>(128);
static{
inti=0;
for(intj=0;j<128;j++){
// symbolTable[j]=(char)j;
if("A"<=j&&j<="Z"
||"a"<=j&&j<="z"
||"0"<=j&&j<="9"){
symbolTable[i++]=(char)j;
}
}
for(charc:"这是中国人写地[备思要爱发]编解码程序&拥有独特的自定义符号表|不过布能使用重复字,汗啊(还差一十二个知*.#)。为我们加油吧,亲!".toCharArray()){
symbolTable[i++]=c;
}
checkTable();
for(intj=0;j<128;j++){
indexTable.put(symbolTable[j],j);
}
}
privatestaticvoidcheckTable()throwsError{
if(symbolTable[127]==0){
thrownewError("符号表长度不正确!");
}
for(chara:symbolTable){
intcount=0;
for(charb:symbolTable){
if(a==b){
count++;
}
}
if(count>2){
thrownewError("符号表有重复符号!");
}
}
}
publicStringencode(byte[]data){
if(data==null||data.length==0){
returnnewString();
}
StringBuilderresult=newStringBuilder();
inttail=0;
for(inti=0;i<data.length;i++){
intmov=(i%7+1);
intcurr=0xFF&data[i];
intcode=tail+(curr>>mov);
result.append(symbolTable[code]);
tail=(0xFF&(curr<<(8-mov)))>>1;
if(mov==7){
result.append(symbolTable[tail]);
tail=0;
}
}
result.append(symbolTable[tail]);
returnresult.toString();
}
publicbyte[]decode(Stringbase128){
if(base128==null||base128.length()==0){
returnnewbyte[]{};
}
intlength=(int)Math.floor(base128.length()*0.875);
byte[]result=newbyte[length];
intidx=0;
inthead=indexTable.get(base128.charAt(0))<<1;
for(inti=1;i<base128.length();){
intmod=i%8;
intcode=indexTable.get(base128.charAt(i++));
result[idx++]=(byte)(0xFF&(head+(code>>(7-mod))));
if(mod==7){
head=0xFF&(indexTable.get(base128.charAt(i++))<<1);
}else{
head=0xFF&(code<<(mod+1));
}
}
returnresult;
}
///////////////////////测试方法///////////////////////////////
publicstaticvoidmain(String[]args){
MyBASE128base128=newMyBASE128();
test(base128);
Stringtxt="这是我的加解密测试";
Stringenc=base128.encode(txt.getBytes());
System.out.println(enc);
System.out.println("----------------");
System.out.println(newString(base128.decode(enc)));
}
privatestaticvoidtest(MyBASE128base128){
for(inti=0;i<10000;i++){
Stringr=randomData();
Stringd=newString(base128.decode(base128.encode(r.getBytes())));
if(!r.equals(d)){
// d=newString(base128.decode(base128.encode(r.getBytes())));
System.out.println("加解密失败!:"+r);
}
}
}
privatestaticStringrandomData(){
StringtextString="了咖啡机累啊戴假发\n\r哦-";
intstart=random(0,textString.length()-3);
intend=random(start+1,textString.length()-1);
returntextString.substring(start,end);
}
privatestaticintrandom(inti,intj){
return(int)Math.ceil(Math.random()*(j-i)+i);
}
}
相关文章
- 使用分类权重解决数据不平衡的问题
- Python 爬虫进阶必备 | 某恩数据网排行加密数据解密逻辑分析
- SwiftUI 与 Core Data —— 数据定义
- 数据宽度
- Java解析(读取)Json数据详解编程语言
- MySQL数据导出:一步到位(mysql导出数据)
- Linux加密API:安全加固保护您的数据(linux加密api)
- Linux安全:全盘加密保护你的数据(linux全盘加密)
- Oracle 密码安全:数据加密的重要性(oracle密码加密)
- 使用Linux文件同步命令实现数据同步(linux文件同步命令)
- 快速导出Redis数据,保障数据安全(redis数据导出)
- 失效Java中Redis数据实现过期失效(redisjava过期)
- 新型恶意程序 Snatch 曝光:进入安全模式加密数据向受害者勒索比特币
- [图]科学家研发新机器学习方法 更轻松洞察海量卫星地图数据
- 苹果新应用 “Track It!”上线,用大数据追踪癫痫病人
- Linux下 DES加密,安全保障数据信息(linuxdes加密)
- MYSQL中MD5加密保护数据安全性(mysqlmd5加密)
- SQL Server加密解密:提升数据安全性的关键!(sqlserver加解密)
- SQL Server 6.05:助力企业数据智能管理(sqlserver605)
- MongoDB:安全保护实现数据加密(mongodb 加密)
- MSSQL触发器实现数据加密保护(mssql 触发器 加密)
- 份数据如何利用MSSQL快速查询指定月份数据(mssql查询指定月)
- 到另一张表从一张表利用Oracle实现数据复制至另一张表(oracle从一张表复制)
- Oracle 位移运算符实现数据加密(oracle 位移运算符)
- 算法在Oracle中实现md5算法数据加密(Oracle中有md5)
- Redis能实现数据持久化吗(redis能持久化数据吗)
- python数据加密代码
- 通过PHP的内置函数,通过DES算法对数据加密和解密