package cn.wiki.openapi.lry.tool; import java.util.HashMap; /** * 128进制加解密, 一个符号可表示7个bit * 可以自定义符号表, 符号不能重复 * @author lry * */ public class MyBASE128 { public static final char[] symbolTable = new char[128]; public static final HashMap<Character, Integer> indexTable = new HashMap<Character, Integer>(128); static { int i = 0; for (int j = 0; j < 128; j++) { if('A' <= j && j <= 'Z' || 'a' <= j && j <= 'z' || '0' <= j && j <= '9') { symbolTable[i++] = (char) j; } } for (char c : "这是中国人写地[备思要爱发]编解码程序&拥有独特的自定义符号表|不过布能使用重复字,汗啊(还差一十二个知*.#)。为我们加油吧,亲!".toCharArray()) { symbolTable[i++] = c; } checkTable(); for (int j = 0; j < 128; j++) { indexTable.put(symbolTable[j], j); } } private static void checkTable() throws Error { if(symbolTable[127] == 0) { throw new Error("符号表长度不正确!"); } for (char a : symbolTable) { int count = 0; for (char b : symbolTable) { if(a == b) { count++; } } if(count > 2) { throw new Error("符号表有重复符号!"); } } } public String encode(byte[] data) { if(data == null || data.length == 0) { return new String(); } StringBuilder result = new StringBuilder(); int tail = 0; for (int i = 0; i < data.length; i++) { int mov = (i % 7 + 1); int curr = 0xFF & data[i]; int code = 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]); return result.toString(); } public byte[] decode(String base128) { if(base128 == null || base128.length() == 0) { return new byte[] { }; } int length = (int) Math.floor(base128.length() * 0.875); byte[] result = new byte[length]; int idx = 0; int head = indexTable.get(base128.charAt(0)) << 1; for (int i = 1; i < base128.length();) { int mod = i % 8; int code = 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)); } } return result; } ///////////////////////测试方法/////////////////////////////// public static void main(String[] args) { MyBASE128 base128 = new MyBASE128(); test(base128); String txt = "李茹钰的所得税的速度是滴哦osidusiou3247IZIiauydiYUI"; String enc = base128.encode(txt.getBytes()); System.out.println(enc); System.out.println("----------------"); System.out.println(new String(base128.decode(enc))); } private static void test(MyBASE128 base128) { for (int i = 0; i < 10000; i++) { String r = randomData(); String d = new String(base128.decode(base128.encode(r.getBytes()))); if(!r.equals(d)) { System.out.println("加解密失败!: " + r); } } } private static String randomData() { String textString = "了咖啡机累啊戴假发\n\r哦\\\\地 \\ 方i \\ 就啊 \n\n\\ \r\\ n\\ 我诶\n人\\ 竟\n \\然n\n\\a\f去tr品\r\f \t\b 味a rad\\ \n\\r\\bn\\r\\h\\j\\\f\\g\\g\\yoi端午节凹入30498305u8tfjlerf-12345i0rwe94ri349-1=-230rcki库i情况i爬q-23r0iwe我饿去骗人34091239581-454-512¥!@#——%)!#¥……×!()¥@#%——(CR!#$U*(%_#*_$%*!245=-"; int start = random(0, textString.length() - 3); int end = random(start + 1, textString.length() - 1); return textString.substring(start, end); } private static int random(int i, int j) { return (int) Math.ceil(Math.random()*(j-i)+i); } }
相关推荐
主要介绍了128进制加密数据示例,这里使用JAVA实现,需要的朋友可以参考下
JavaClass文件加密专家通过分析Class文件的结构,将Class二进制代码中耗时较多的部份抽出并替换为Native C代码, 并且使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件...
本文就简单介绍如何通过JAVA实现AES加密: /** * 测试AES加密和解密 * @param args */ public static void main(String[] args) { /**数据初始化**/ String content = "http://www.mbaike.net"; String...
Java 类文件加密专家通过分析Class文件的结构,使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。 系统特点 1.采用纯C语言开发的内核算法,运行速度极快。 2.彻底...
NULL 博文链接:https://luanxiyuan.iteye.com/blog/1938348
因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,解密的任意组合,当然也可自己简单改下参照序列顺序,使自己的加密解密变为独一的,网上无法使用工具解密出正确的数据。熟悉二进制的可...
例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码...
// 二进制加密数据 int[] encryptdata = new int[64]; // 加密操作完成后的字节数组 byte[] EncryptCode = new byte[8];// 密钥初试化成二维数组 int[][] KeyArray = new int[16][48];// 将密钥字节数组转换成...
NULL 博文链接:https://iszhao.iteye.com/blog/1140899
java中将数据通过des算法加密解密,可修改向量和加密填充方式,代码中有注释。
使用java实现了des 和 3des * @param strKey 密钥 * @param result 要解密的数据 * @throws Exception */ public String desDecrypt(String strKey,byte[] result) throws Exception { if(strKey....
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器地址 ...
群裏星星大神寫的,我改了一下,默認改為BASE64編碼輸出...再次修改,原版只针对文字的加密,对二进制不能处理,这次修改我增加了一个加密类,改写了几个函数,速度比上一个版本快多了,而且能对任何数据进行加密解密。
Java Base64编码是一种用64个字符表示任意二进制数据的方法,通过将3个字节的数据转换为4个Base64字符,实现数据的压缩和传输。 Java Base64解码过程 Java Base64解码是将Base64编码后的字符串还原为原始二进制数据...
百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText();...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器...
Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 String serverAddr=jtfServer.getText(); //得到服务器...
DES/3DES加解密、MAC运算、数据异或、数据拆分、CRC16运算工具
可以实现把文本文件转为二进制加密文件,且保证写入前后数据不发生变化