首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一个加密数字和逗号且减小空间的算法

2012-12-23 
一个加密数字和逗号且减少空间的算法注意本算法只能处理由 0,1,2,3,4,5,6,7,8,9 和逗号 这是个字符组成的

一个加密数字和逗号且减少空间的算法
注意本算法只能处理由 0,1,2,3,4,5,6,7,8,9 和逗号 这是个字符组成的内容, 如要支持 小数点,回车等,可做简单的扩展。本算法将 0 到? 9 , 加上 逗号, 共 11 个字符, 二个字符一组作为排列组合, 共有 121 总排列,用一个字节表示, 这样理论上 ?n 字符的串,可变成 n/2 个长度的字符, 然后将这 n/2 长度的字节数据做 base64 编码, 长度又增加为 4/3 陪, 所以总的长度为:?n/2 * 4/3 =2n/3 , 即长度大概缩小了 三分之一 字符数,内容也得到了初步的加密。 算法可逆。程序如下,请大家评测:import?sun.misc.BASE64Decoder;import?sun.misc.BASE64Encoder;??public?class?ZipTest?{?public?static?String?decode(byte[]?b){String?ret="";for(int?i=0;i<b.length;i++){ret+=decode(b[i]);}return?ret;}public?static?String?decode(byte?b){int?i=b;if(i<0){i+=256;}if(i>=200){i=i-200;return?String.valueOf(toChar(i));}int?h=i/11;int?l=i%11;return?String.valueOf(toChar(h))+String.valueOf(toChar(l));?}public?static?byte[]?encode(String?msg){int?len=msg.length()/2;if(msg.length()%2>0){len++;}byte?[]e=new?byte[len];?int?i=0;int?k=0;while(i<msg.length()?&&?i+1<msg.length()){e[k]=encode(msg.charAt(i),msg.charAt(i+1));?i+=2;k++;}if(i<msg.length()){e[k]=encode(msg.charAt(i));?}return?e;}public?static?int?toInt(char?c){if(c==',')?return?0;return?(c-'0')+1;}public?static?char?toChar(int?i){if(i==0)?return?',';return?(char)(i+'0'-1);}public?static?byte?encode(char?c1,char?c2){int?h=toInt(c1);int?l=toInt(c2);int?i=h*11+l;return?(byte)i;}public?static?byte?encode(char?c1){int?h=toInt(c1);??int?i=200+h;return?(byte)i;}public?static?String?replaceChars(String?ret)?{?ret?=?ret.replace('+',?'_');ret?=?ret.replace('/',?'.');ret?=?ret.replace('=',?'-');return?ret;}public?static?String?restoreChars(String?ret)?{?ret?=?ret.replace('_',?'+');ret?=?ret.replace('.',?'/');ret?=?ret.replace('-',?'=');return?ret;}public?static?void?main(String?[]args)throws?Exception?{?//<月亮智商人民>下载地址http://wap.music.ovi.com.cn/rt/d/?p=44字符String?msg="10234567,"+"12345678901,"+System.currentTimeMillis()+",0,0,0";System.out.println(msg+"\t"+msg.length());System.out.println();byte?[]ec=encode(msg);for(int?i=0;i<ec.length;i++){System.out.print((int)ec[i]+",");}System.out.println();BASE64Encoder?base64=new?BASE64Encoder();????????String?ret=replaceChars(base64.encode(ec));??System.out.println(ret);BASE64Decoder?de=new?BASE64Decoder();byte?[]m=de.decodeBuffer(restoreChars(ret));for(int?i=0;i<m.length;i++){System.out.print((int)m[i]+",");}System.out.println();??System.out.println(decode(m));}} 1 楼 白云天 2010-11-10   长度大概缩小了 三分之一 字符数


这个是错误的,谁能告诉我正确的是多少?

热点排行