`

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

阅读更多
注意本算法只能处理由 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));
}
}
0
0
分享到:
评论
1 楼 白云天 2010-11-10  
长度大概缩小了 三分之一 字符数


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

相关推荐

    哈夫曼树算法文件全加密解密

    公司为了保证文件不被泄密,要求技术人员将文件中的每个字符都用一个二进制位串进行加密,需要时能进行解密,但必须保证加密后的文件不能过大,且对加密的文件进行解密后与原文件必须完全一致。菜单包括: 1. 显示...

    对称加密算法对文本文件进行加密解密

    对称加密算法实现对文本文件的加密,以及对加密文件的解密。

    java AES加密算法

    这是一个写加密算法的例子,为了来您在互联网的安全工作中能够更加得心应手,我为您提供了这个加密算法

    上海电机学院C语言实训答案

    (29)某公司在传输数据过程中为了安全要对数据进行加密,若传递的是四位的整数,对其进行加密的规则为:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。...

    rar压缩软件.rar

    RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...

    中文简体压缩软件RAR 6.0

    RAR 是一个强力压缩工具,允许你管理和管理压缩文件。控制台 RAR 只支持 RAR 格式,带有的 ".rar" 扩展名的文件。ZIP 和其他格式不被支持。Windows 用户可以 安装图形界面 RAR 版本 - WinRAR,它可以处理更多...

    CZK系统备份恢复_Setup.exe

    输入大于4一个偶数,显示两个素数和,这就是1+1(1个素数+1个素数),哥德巴赫猜想是任何大偶数都可以 用两个素数和表示,这个猜想现在还无法证明,这里只是验证。 (4)-求欧拉函数, 在数论中,对正整数n,欧拉函数...

    WinRAR_4.0.exe

    RAR 是一个强力压缩工具,允许你管理和操作压缩文件。控制台 RAR 只支持 RAR 格式,带有的 ".rar" 扩展名的文件。ZIP 和其他格式不被支持。Windows 用户可以 安装图形界面 RAR 版本 - WinRAR,它可以处理更多的...

    Myeclipse 快捷键

    这是一个写加密算法的例子,为了来您在java编程工作中工作中能够更加得心应手,我为您提供了这个加密算法

    C#基于FTP的自动更新 ini文件控制 (源码,多注释)

    自定义加密算法,保证ini文件关键信息安全 以下为配置文件内容预览 [AutoUpdate] ;当前FTP更新资源的版本 version=1 ;更新完执行的主程序名称,不带后缀 exename=HLSystem ;更新方式 遍历更新 更新目录所有文件更新...

    在线聊天室(ajax+asp)

    dim admins: admins="anlige,admin" '管理员用户,可自行配置,每个管理员以英文逗号(,)分割;无数量限制 dim pwd: pwd="43894a0e21232f297a57a5a743894a0e4a801fc3" '管理密码,所有管理员使用一个密码!本密码经MD5加密...

    CETool(最新2013.8)

    简介:CETool是一个WinCE的辅助程序,使用C语言和Windows API编写,作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell中的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    WinCE脚本解析程序(写写文本就能做很多意想不到的事情)

    简介:CETool是一个WinCE的辅助程序,使用C语言和Windows API编写,作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell中的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过...

    Oracle9i的init.ora参数中文说明

    它将编译程序标志列表指定为一个用逗号分隔的字符串列表。 值范围: native (PL/SQL 模块将按本机代码来编译。), interpreted (然后 PL/SQL 模块将被编译为 PL/SQL 字节代码格式), debug (PL/SQL 模块将用探测调试...

    CouchbaseMock:用于Couchbase的Java模拟

    CouchbaseMock-Couchbase测试服务器CouchbaseMock是一个测试服务器,实现了一些memcached协议,某些SDK(包括C SDK)使用该协议进行基本测试。 尽管建议对真实服务器进行测试,但CouchbaseMock具有独立性(无需将其...

    易语言程序免安装版下载

    修改扩展界面支持库一,为“树形框”增加多态检查框功能,相应地添加了多个与检查框相关的属性、方法和事件。 17. 修改高级表格支持库,允许“复制选定文本()”“剪切选定文本()”在“允许选择块”属性为假时复制...

    精易模块[源码] V5.25

    12、修正“编码_RC4加密”和“编码_RC4解密”不能与数据操作支持库通信的BUG,感谢易友【@落款hMZ 】提供代码。 13、增加“类_数据操作”类模块,包含hmac-sha1 ,hmac-sha256 常用散列算法,带实例,感谢易友【@...

    3xdoing留言本 v2.0.0.rar

    前台入口文件为admin.php后台入口文件为index.php留言本的主要逻辑算法都在此两个文件中,使用smarty模板时可以快速获得一些路径也可以生成一些路径,以urlmodel为1时举例,例如: 获得public文件夹{$__PUBLIC__} ...

    3xdoing留言本 2.0.zip

    此留言本基于thinkphp编写,遵循Apache协议,我们本着开源的态度,不准用户封装加密此留言本,可以进行二次开发,但必须开源,并且不准以此留言本盈利,我们衷心的希望您可以把此留言本的BUG提交到我们会及时修改但...

Global site tag (gtag.js) - Google Analytics