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); } }
相关推荐
Java实现的进制转换工具类完整示例 Java实现的进制转换工具类是...Java实现的进制转换工具类可以广泛应用于各种场景,如数据加密、颜色表示、IP地址表示等。在使用该工具类时,需要根据实际情况选择合适的方法和参数。
在本文中,我们将深入探讨128进制加密数据的概念以及如何使用Java进行实现。128进制加密是一种将数据编码为128个不同符号的方法,每个符号代表7位二进制数据。这种编码方式允许自定义符号表,但需要注意的是,符号...
总的来说,保护Java代码不被反编译是软件开发中的一项重要任务,"JavaClass二进制文件加密专家"提供了有效的工具和技术,帮助开发者实现这一目标。通过混淆、加密、签名等手段,可以大大提高代码的安全性,减少潜在...
在Java编程语言中,将十六进制数转换为图片是一项常见的任务,特别是在数据可视化或加密解密领域。这个过程通常涉及到将十六进制字符串解析成字节数组,然后将这些字节用作像素值来创建图像。以下是一个详细的步骤...
在实际应用中,进制转换有着广泛的应用,例如在数据存储、网络传输和加密解密等领域。因此,掌握Java实现进制转换的方法是非常重要的。 在本文中,我们讨论了使用Java实现各进制转换的方法,包括十进制到二进制、八...
在Java编程中,处理图像数据并将其转换为16进制表示是一项常见的任务,尤其是在进行数据存储、加密或分析时。本示例中,我们关注的是如何读取一个.jpg格式的图片文件,并提取其最后部分的数据,将其转换为16进制字符...
在本示例中,我们将展示如何使用 3DES 算法在 Java 中实现加密和解密操作,并封装 byte 数组和 16 进制字符串之间的互转。 Java 中的 3DES 加密算法 在 Java 中,我们可以使用 javax.crypto 包中的 Cipher 类来...
在Java中,我们可以自定义一个工具类,如`ConvertUtil.java`,来实现26进制和其他进制之间的转换。以下是一些可能的方法: 1. **26进制转十进制**:这个过程可以通过映射每个字母到其对应的数字值(A=1,B=2,...,...
"16进制加密_解密源代码"可能包含C++、Java、Python、C#等编程语言的源代码实现,这些代码展示了如何进行16进制加密和解密。源代码通常分为两个主要部分:加密函数和解密函数。加密函数会接收输入的明文,将其转换为...
以上就是关于"用Java实现的图片加密程序"的一些主要知识点,这个项目不仅涉及了Java的IO流技术,还涵盖了加密算法、数据安全等多个方面,对于学习和提升Java编程技能以及信息安全知识非常有帮助。
在Java编程语言中,将字符转换为十六进制表示的ASCII码是一项常见的任务,尤其是在处理字符串数据时。本文将深入探讨如何实现这个功能,并通过一个具体的示例代码`StringToAscii.java`进行演示。 首先,我们需要...
Java中的URL加密处理是网络安全传输数据的一个重要环节,它可以防止敏感信息在传输过程中被窃取或篡改。本文将深入探讨如何使用Java实现URL加密,特别是基于Base64编码和编码转换的方式。我们将重点关注以下几个方面...
在Java编程中,十六进制数据和字符串之间的转换是一项基本且重要的技能,特别是在处理编码、加密或网络通信等场景时。 #### 关键知识点解析 1. **十六进制与字符串转换的方法** 在给定的代码片段中,`CodeChange...
在IT领域,加密算法是确保数据...综上所述,这个Java项目不仅展示了如何使用纯Java实现16进制加密算法,还强调了加密在数据安全中的作用以及测试的重要性。通过深入理解这些概念,开发者可以更好地构建安全的应用程序。
在深入探讨“Java二进制转化界面”的主题之前...总之,设计和实现一个Java二进制转化界面是一个综合了编程技巧、UI设计和数据处理能力的过程。通过遵循上述指导原则,开发者可以创建出既功能强大又用户友好的应用程序。
总的来说,Java实现DES加密涉及到了对称加密的概念、DES算法的原理、Java的加密API使用,以及Base64编码。理解并掌握这些知识点对于进行数据安全编程至关重要。在编写和使用这类工具类时,应确保密钥管理的安全性,...
本主题主要探讨的是如何使用C#实现加密和解密操作,以便与Java应用程序进行无缝对接,特别是使用AES/CBC/PKCS7Padding算法,并将结果转换为16进制表示。下面将详细阐述相关知识点。 **AES(Advanced Encryption ...
本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...
`parseByte2HexStr`方法将字节数组转换为十六进制字符串,这允许在日志、存储或显示时以人类可读的形式表示加密数据。相反,`parseHexStr2Byte`方法将十六进制字符串转换回字节数组,以便于解密。 在实际应用中,...