当前位置: 首页 > Linux

一个简单的加密工具,性能好像不太好,待优化

时间:2023-04-06 19:29:44 Linux

一个简单的加密工具,性能貌似不行,待优化包com.kxvz.common.crypt;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjava.io.ByteArrayOutputStream;importjava.security.SecureRandom;导入java.util.ArrayList;导入java.util.List;导入java.util.Random;导入java.util.zip.Deflater;导入java.util.zip.Inflater;公共类Xe{privatestaticfinalStringHEX_NORMAL="0123456789abcdef";privatestaticfinalStringHEX_TMP="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";私人静态最终inthexLen=100;privatestaticfinalListhexs=newArrayList<>(hexLen);静态{创();}/***加密bin->en->hex->zip**@parambytes*@return*/publicstaticbyte[]en(byte[]bytes,byte[]pass)throwsException{longt1=System.currentTimeMillis();byte[]en=encrypt(bytes,pass);长t2=System.c当前时间毫秒();十六进制字符串=toHex(en);longt3=System.currentTimeMillis();byte[]res=compress(hex.getBytes());longt4=System.currentTimeMillis();System.out.println("EnTime:encrypt:"+(t2-t1)+":toHex:"+(t3-t2)+":compress:"+(t4-t3));返回资源;}/***破解zip->hex->de->bin**@parambytes*@return*/publicstaticbyte[]de(byte[]bytes,byte[]pass)throwsException{byte[]unzip=解压缩(字节);byte[]hex=hexTo(newString(unzip));返回解密(十六进制,通过);}publicstaticStringenAndHex(byte[]bytes,byte[]pass)throwsException{byte[]res=en(bytes,pass);返回十六进制(res);}publicstaticbyte[]deWithHex(Stringcontent,byte[]pass)throwsException{byte[]hex=hexTo(content);返回德(十六进制,通过);}privatestaticStringgetHexSource(int索引){返回hexs.get(索引);}privatestaticinttoInt(byte[]bytes){if(bytes==null||bytes.length!=2){thrownewRuntimeException("Lengthbyteslengtherror");}intc1=(int)bytes[0];intc2=(int)bytes[1];返回Integer.valueOf(c1+""+(c2<10?"0"+c2:c2));}privatestaticbyte[]toBytes(intnum){if(num>10000||num<0){thrownewRuntimeException("数字桅杆在0~9999");}if(num<100){returnnewbyte[]{0x00,(byte)num};}else{Stringtmp=String.valueOf(num);inta1=Integer.valueOf(tmp.substring(0,tmp.length()-2));inta2=Integer.valueOf(tmp.substring(tmp.length()-2));返回新字节[]{(字节)a1,(字节)a2};}}privatestaticStringtoHex(byte[]bytes){intindex=newRandom().nextInt(hexLen);字符串hexTmp=getHexSource(索引);字符串结果="";byte[]lenBytes=toBytes(索引);十六进制字符串=String.valueOf(HEX_NORMAL.charAt((lenBytes[0]&0xF0)>>4));十六进制+=String.valueOf(HEX_NORMAL.charAt(lenBytes[0]&0x0F));结果+=十六进制;hex=String.valueOf(HEX_NORMAL.charAt((lenBytes[1]&0xF0)>>4));十六进制+=String.valueOf(HEX_NORMAL.charAt(lenBytes[1]&0x0F));结果+=十六进制;for(inti=0;i>4));十六进制+=String.valueOf(hexTmp.charAt(bytes[i]&0x0F));结果+=十六进制;}返回结果;}privatestaticbyte[]hexTo(Stringhex){byteindexFirstHigh=(byte)((HEX_NORMAL.indexOf(hex.charAt(0)))<<4);byteindexFirstLow=(byte)HEX_NORMAL.indexOf(hex.charAt(1));字节索引First=(byte)(indexFirstHigh|indexFirstLow);byteindexLastHigh=(byte)((HEX_NORMAL.indexOf(hex.charAt(2)))<<4);byteindexLastLow=(byte)HEX_NORMAL.indexOf(hex.charAt(3));byteindexLast=(byte)(indexLastHigh|indexLastLow);byte[]lenBytes=newbyte[]{indexFirst,indexLast};intindex=toInt(lenBytes);字符串hexTmp=getHexSource(索引);字符串内容=hex.substring(4);intlen=content.length()>>1;字节[]结果=新字节[len];字节高=0;字节低=0;对于(inti=0;itmp=newArrayList<>(17);十六进制字符串="";while(tmp.size()<16){intindex=rnd.nextInt(len);charc=HEX_TMP.charAt(index);如果(!tmp.contains(c)){tmp.add(c);十六进制+=String.valueOf(c);}}tmp.clear();返回十六进制;}}==LOG-FooterStart==================================作者公众号:Loyomer简洁:Kxvz的生活账簿。技术、生活、随笔、文摘……欢迎大家关注……==LOG-FooterEnd=====================================