java中,两个16进制的字符串异或,经常用于加密机加解密当中 ,具体异或的方法如下:
package com.foxconn;
import java.text.ParseException;
public class Aa {
private static String hexStr = "0123456789ABCDEF";
public static void main(String args[]) throws ParseException{
String code1 = encode("9CE00K00781065");
String code2 = encode("TOX$123FTOX$321");
System.out.println(code1);
System.out.println(code2);
System.out.println("7F0C1D14017903767F6814010203");
String result ="";
for(int i=0; i<code1.length();i++){
char c1 = code1.charAt(i);
char c2 = code2.charAt(i);
String a = convertHexToBinary(c1+"");
String b = convertHexToBinary(c2+"");
byte [] aa = a.getBytes();
byte [] bb = b.getBytes();
String cc ="";
for( int j = 0;j<aa.length;j++ ){
cc += aa[j]^bb[j];
}
String tmp =Integer.toHexString(Integer.valueOf(cc,2).intValue()).toString();
result +=tmp;
}
}
public static String convertHexToBinary(String hexString){
long l = Long.parseLong(hexString, 16);
String binaryString = Long.toBinaryString(l);
int shouldBinaryLen = hexString.length()*4;
StringBuffer addZero = new StringBuffer();
int addZeroNum = shouldBinaryLen-binaryString.length();
for(int i=1;i<=addZeroNum;i++){
addZero.append("0");
}
return addZero.toString()+binaryString;
}
public static String encode(String str) {
// 根据默认编码获取字节数组
byte[] bytes = str.getBytes();
String strs = "";
// 将字节数组中每个字节拆解成2位16进制整数
for (int i = 0; i < bytes.length; i++) {
//取得高四位
strs += hexStr.charAt((bytes[i] & 0xf0) >> 4);
// System.out.println(i+"--"+bytes[i]+"----"+(bytes[i] & 0xf0)+"----"+hexString.charAt((bytes[i] & 0xf0) >> 4)+"---"+hexString.charAt((bytes[i] & 0x0f) >> 0));
//取得低四位
strs += hexStr.charAt((bytes[i] & 0x0f) >> 0);
}
return strs;
}
}
分享到:
相关推荐
本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...
"Java 编程实现对十六进制字符串异或运算代码示例" Java 编程实现对十六进制字符串异或运算代码示例是指使用 Java 语言实现对十六进制字符串进行异或运算的代码示例。在这个示例中,主要介绍了异或运算的定义、运算...
在提供的文件中,有两个关键的类:`CharterConverter.java`和`CRC16Util.java`。`CRC16Util.java`很可能是实现CRC16校验的核心类,它可能包含了以下方法: 1. `int calculateCRC16(byte[] data)`:此方法接收一个...
这些代码会详细展示如何在C#环境中实现AES/CBC/PKCS7Padding加密解密,并将结果转换为16进制字符串,从而实现与Java的兼容性。 总之,理解并掌握AES加密算法、CBC工作模式、PKCS7Padding以及在C#和Java之间的兼容性...
- `Bytes2HexString` 方法将字节数组转换为16进制字符串,同样使用了`Integer.toHexString`方法,并将所有16进制字符串拼接在一起。 2. **字节合成**: - `uniteBytes` 方法用于将两个ASCII字符(表示16进制的...
6. **16进制转换**:这部分可能包含将二进制数据转换为16进制字符串的函数,以供人类可读的格式查看。 7. **移植验证**:源码作者提到已将代码移植到VS(Visual Studio)环境中,并进行了验证,这表明代码可以在...
- 首先创建一个长度为原字符串长度一半的新byte数组,因为每个字节由两个16进制字符表示。 - 使用上面定义的 `uniteBytes` 方法将每两个字符合并为一个字节。 ### 三、CRC16校验码计算 #### 3.1 CRC16Util 类 该...
该方法用于将一个16进制字符串转换为对应的`byte`数组。 **实现步骤:** 1. **初始化**一个新的`byte`数组`ret`用于存储结果。 2. **获取**原始字符串的字节数组。 3. **循环遍历**原字符串,每次处理两个字符。 4....
- `HexString2Bytes`方法接收一个16进制字符串,然后将其分割为每两个字符一组,转换为对应的字节值,最后返回一个字节数组。 4. **CRC16校验**: - CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于...
1. **字符到数值映射**:首先,我们需要将16进制字符串中的每个字符映射到其对应的10进制值。例如,'0'对应0,'1'对应1,'A'对应10,'F'对应15。 2. **权重分配**:16进制数的每一位都有一个权重,从右向左,权重...
- **二进制与十六进制转换**:可以使用`Integer.parseInt()`或`Long.parseLong()`方法配合`format()`函数将16进制字符串转换为二进制,反之亦然。 - **字符串与字节数组转换**:`getBytes("UTF-8")`可以将字符串...
- 使用`Integer.toHexString()`方法将字节转换为16进制字符串。 - 如果转换后的字符串长度为1,则在其前面添加一个“0”。 ##### 2. 将`byte`数组转换为16进制字符串 此方法接收一个`byte`数组,并返回其对应的16...
在PB语言中,实现基于MODBUS协议的CRC16校验算法可以使用函数fx_modbus_crc16,该函数可以对输入的字符串进行CRC16校验,并返回16进制字符串的CRC16校验值。 函数fx_modbus_crc16的实现过程可以分为以下几个步骤: ...
这可以通过循环遍历字节数组,将每个字节转换为两个16进制字符来实现。Java 8及以上版本提供了`java.util.HexFormat`类,简化了这个过程。 4. **AES/CBC模式**:相对于ECB,CBC模式更安全,因为它引入了前一个块的...
MD5算法对这些字节进行多次迭代计算,最后得到一个16字节的摘要,再以16进制形式展示,即32个字符的字符串。 3. **代码实现**:在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。例如,`MD5....
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成固定长度的输出,通常是32位的16进制字符串。在Java中,可以使用`java.security.MessageDigest`类来实现MD5加密。在...
5. 将得到的字节数组转换为16进制字符串。因为每个字节是8位,所以需要两位十六进制表示,可以使用`StringBuilder`和`Integer.toHexString()`来完成: ```java StringBuilder hexString = new StringBuilder(); ...
标题中的“java编写的两个modbus CRC16实现”指的是使用Java编程语言实现的两种Modbus协议中的CRC16校验方法。CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据传输错误检测的校验码技术,而Modbus...
- `bin()`:将十进制转换为前缀为"0b"的二进制字符串。 - `oct()`:将十进制转换为前缀为"0o"的八进制字符串。 - `hex()`:将十进制转换为前缀为"0x"的十六进制字符串。 - `int()`:配合第二个参数(基数)可将字符...
为了方便使用,我们可以将上述过程封装成一个工具类,提供一个静态方法,接受字符串作为参数,返回MD5加密后的16进制字符串。这样的工具类可以复用在项目中的多个地方,提高代码的可读性和可维护性。 通过阅读`md5....