`

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

阅读更多
注意本算法只能处理由 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加密算法

    Java中的AES(Advanced Encryption Standard)加密算法是一种广泛应用的对称加密技术,用于保护敏感数据,如个人信息、商业机密等。AES是FIPS(Federal Information Processing Standards)所批准的标准,其安全性和...

    中英文加密解密

    区位码是将每个汉字映射到一个特定的坐标位置,而Unicode编码则为每个字符分配一个唯一的数字。可以选取编码值的某个部分作为移动基数,对每个字符的编码进行加减操作。例如,如果选择编码的最后一位作为移动位,...

    C# 批量生成随机密码必须包含数字和字母并用加密算法加密

    这里文章采用了MD5加密算法,这是广泛使用的一种加密方法,虽然它在安全性方面已不再是首选,但因其快速和简单,用于非加密性要求较高的场合仍然是可行的。 MD5加密的实现涉及到了一些底层的细节,如字符编码转换...

    java zip加密压缩

    每一行代表一个记录,由逗号分隔的字段组成。 2. **Java ZIP压缩**:Java提供了`ZipOutputStream`类来创建ZIP文件。通过向这个流写入字节,我们可以将多个文件或目录打包到一个ZIP文件中。首先,我们需要创建一个`...

    列表数据DES加密

    DES(Data Encryption Standard,数据加密标准)是一种古老的对称加密算法,基于Feistel结构,使用64位的密钥对数据进行加密和解密。虽然DES在今天已经显得不够安全,因为其56位的有效密钥长度可以被现代计算机迅速...

    VB程序设计的常用算法4.pdf

    其次,字符串的加密和解密算法是一种简单的替换方法。通过在每个字符上加或减一个固定的序数k,实现加密或解密。例如,如果k为5,字符C将被其后面的第5个字母替换。加密时,如果加密后的字符超出字母表范围,需要...

    flask、element、vue项目实战:搭建一个加密excel数据的网站.pdf

    - 加密算法选择:使用下拉框(`el-select`)让用户选择加密算法,如 MD5 和 SHA 系列。 5. 后端技术: - `Flask`:Python 的轻量级 Web 开发框架,用于接收前端上传的文件、处理数据加密及文件下载。 - `os` ...

    wyd7xxbin加密解密

    在这个场景下,我们有两个批处理文件(csv2bin.bat和bin2csv.bat)以及一个可执行文件(7xxITConvert.exe),它们可能用于在CSV(逗号分隔值)和7xxBIN文件之间进行转换,并且可能包含了加密和解密的逻辑。...

    VB程序设计的常用算法4.docx

    加密是通过对每个字符的ASCII码加上一个固定值`k`,超出字母范围时进行循环,如超出`\`到`\`的范围,解密则是相反的过程。例如,当`k`为5,加密后`你很好`变为`dtzfwjltti`。下面的加密程序根据字符范围分别对大写和...

    0-9数字与26个大写的英文字母数据集.rar

    标题 "0-9数字与26个大写的英文字母数据集.rar" 暗示了这个压缩包包含了一个特定类型的数据集,该数据集由0到9的数字和26个大写英文字母组成。这样的数据集在信息技术领域中通常用于训练机器学习模型、进行算法测试...

    生成1到n的随机数

    在计算机编程中,随机数生成是常见需求之一,尤其在游戏、加密算法、模拟实验等领域有着广泛的应用。本篇文章将详细解析一个C语言程序,该程序能够根据用户输入的整数n(n &gt; 0),生成1至n之间所有整数的一个随机...

    数据结构-3期(KC002) 数据加密与解密.docx

    项目的目标是对包含英文字母、逗号、句点、空格和回车的文本文件进行加密。加密过程需要确保解密后的文件能恢复到原始内容,保持一致。 二、项目分析: 1. 文件读取:首先读取文本文件“important.txt”的内容,将...

    Cipher Encryption Code:使用斐波那契数列加密和解密字符串-matlab开发

    在本文中,我们将深入探讨如何使用斐波那契数列进行字符串加密和解密,特别是在MATLAB编程环境中的实现。...记住,虽然这种方法简单且有趣,但在实际的安全应用中,应该考虑更强大和成熟的加密标准,如AES或RSA。

    教你如何解密js/vbs/vbscript加密的编码异处理小结

    它遍历文本框中的每个字符,获取其ASCII值,并将这些值以逗号分隔的形式构建一个新的字符串`s`,然后嵌入到一个新的JavaScript代码段中,该段代码会使用`eval()`函数将ASCII字符串转换回原始字符。 3. **VBScript...

    任意长整数加法源代码数据结构

    这个函数会忽略非数字字符(如逗号和换行符),并在遇到字符 `#` 时停止读取。当读取到一个四位数时,它会在链表中创建一个新的节点,并将该数存储在节点的 `data` 字段中。最后,`judge` 函数可能用于检查链表的...

    诸葛武侯巧连神数[管理资料].pdf

    1. 数据编码与解码:数字序列可以是加密信息的一部分,需要使用某种特定的算法或者密钥进行解码。在管理资料中,数据的加密和解密是非常重要的,以保护敏感信息不被未经授权的个人获取。 2. 项目管理编号:在项目...

    (完整)SQL函数使用大全-推荐文档.pdf

    加密函数支持加密、解密、数字签名和数字签名验证。游标函数返回有关游标状态的信息。日期和时间函数可以更改日期和时间的值。数学函数执行三角、几何和其他数字运算。元数据函数返回数据库和数据库对象的属性信息。...

    20220601_2000_24th.zip

    它允许用户将多个文件打包成一个单一的ZIP文件,以减少存储空间并加快传输速度。 2. **压缩算法**:ZIP文件通常使用DEFLATE算法进行压缩,这是一种结合了LZ77和霍夫曼编码的无损数据压缩算法。 3. **文件管理**:...

Global site tag (gtag.js) - Google Analytics