`

java中两个16进制字符串异或

阅读更多
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位异或运算

    本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9和A到F(或a到f)组成的字符序列,每个字符代表4位二进制数。例如,十六进制数"AB"在二进制下表示为10101011。...

    Java编程实现对十六进制字符串异或运算代码示例

    "Java 编程实现对十六进制字符串异或运算代码示例" Java 编程实现对十六进制字符串异或运算代码示例是指使用 Java 语言实现对十六进制字符串进行异或运算的代码示例。在这个示例中,主要介绍了异或运算的定义、运算...

    java实现CRC16校验功能

    在提供的文件中,有两个关键的类:`CharterConverter.java`和`CRC16Util.java`。`CRC16Util.java`很可能是实现CRC16校验的核心类,它可能包含了以下方法: 1. `int calculateCRC16(byte[] data)`:此方法接收一个...

    C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制.rar

    这些代码会详细展示如何在C#环境中实现AES/CBC/PKCS7Padding加密解密,并将结果转换为16进制字符串,从而实现与Java的兼容性。 总之,理解并掌握AES加密算法、CBC工作模式、PKCS7Padding以及在C#和Java之间的兼容性...

    java版的算法大全

    - `Bytes2HexString` 方法将字节数组转换为16进制字符串,同样使用了`Integer.toHexString`方法,并将所有16进制字符串拼接在一起。 2. **字节合成**: - `uniteBytes` 方法用于将两个ASCII字符(表示16进制的...

    3des cbc加密解密 base64 16进制输出

    6. **16进制转换**:这部分可能包含将二进制数据转换为16进制字符串的函数,以供人类可读的格式查看。 7. **移植验证**:源码作者提到已将代码移植到VS(Visual Studio)环境中,并进行了验证,这表明代码可以在...

    java算法大全(完整书签)

    - 首先创建一个长度为原字符串长度一半的新byte数组,因为每个字节由两个16进制字符表示。 - 使用上面定义的 `uniteBytes` 方法将每两个字符合并为一个字节。 ### 三、CRC16校验码计算 #### 3.1 CRC16Util 类 该...

    JAVA算法大全,多年积累总结,直接拿去用

    该方法用于将一个16进制字符串转换为对应的`byte`数组。 **实现步骤:** 1. **初始化**一个新的`byte`数组`ret`用于存储结果。 2. **获取**原始字符串的字节数组。 3. **循环遍历**原字符串,每次处理两个字符。 4....

    java实用算法代码大全.docx

    - `HexString2Bytes`方法接收一个16进制字符串,然后将其分割为每两个字符一组,转换为对应的字节值,最后返回一个字节数组。 4. **CRC16校验**: - CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于...

    支持任意大的16进制转10进制例程.rar

    1. **字符到数值映射**:首先,我们需要将16进制字符串中的每个字符映射到其对应的10进制值。例如,'0'对应0,'1'对应1,'A'对应10,'F'对应15。 2. **权重分配**:16进制数的每一位都有一个权重,从右向左,权重...

    JAVA_MAC地址校验和转换

    - **二进制与十六进制转换**:可以使用`Integer.parseInt()`或`Long.parseLong()`方法配合`format()`函数将16进制字符串转换为二进制,反之亦然。 - **字符串与字节数组转换**:`getBytes("UTF-8")`可以将字符串...

    java算法代码大全

    - 使用`Integer.toHexString()`方法将字节转换为16进制字符串。 - 如果转换后的字符串长度为1,则在其前面添加一个“0”。 ##### 2. 将`byte`数组转换为16进制字符串 此方法接收一个`byte`数组,并返回其对应的16...

    基于MODBUS协议的CRC16校验算法-PB

    在PB语言中,实现基于MODBUS协议的CRC16校验算法可以使用函数fx_modbus_crc16,该函数可以对输入的字符串进行CRC16校验,并返回16进制字符串的CRC16校验值。 函数fx_modbus_crc16的实现过程可以分为以下几个步骤: ...

    java加密.rar

    这可以通过循环遍历字节数组,将每个字节转换为两个16进制字符来实现。Java 8及以上版本提供了`java.util.HexFormat`类,简化了这个过程。 4. **AES/CBC模式**:相对于ECB,CBC模式更安全,因为它引入了前一个块的...

    字符串MD5加密

    MD5算法对这些字节进行多次迭代计算,最后得到一个16字节的摘要,再以16进制形式展示,即32个字符的字符串。 3. **代码实现**:在Java中,我们可以使用`java.security.MessageDigest`类来实现MD5加密。例如,`MD5....

    java_MD5加密源码

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成固定长度的输出,通常是32位的16进制字符串。在Java中,可以使用`java.security.MessageDigest`类来实现MD5加密。在...

    MD5-java版

    5. 将得到的字节数组转换为16进制字符串。因为每个字节是8位,所以需要两位十六进制表示,可以使用`StringBuilder`和`Integer.toHexString()`来完成: ```java StringBuilder hexString = new StringBuilder(); ...

    java编写的两个modbus CRC16实现

    标题中的“java编写的两个modbus CRC16实现”指的是使用Java编程语言实现的两种Modbus协议中的CRC16校验方法。CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据传输错误检测的校验码技术,而Modbus...

    进制转换问题

    - `bin()`:将十进制转换为前缀为"0b"的二进制字符串。 - `oct()`:将十进制转换为前缀为"0o"的八进制字符串。 - `hex()`:将十进制转换为前缀为"0x"的十六进制字符串。 - `int()`:配合第二个参数(基数)可将字符...

    java 实现md5加密

    为了方便使用,我们可以将上述过程封装成一个工具类,提供一个静态方法,接受字符串作为参数,返回MD5加密后的16进制字符串。这样的工具类可以复用在项目中的多个地方,提高代码的可读性和可维护性。 通过阅读`md5....

Global site tag (gtag.js) - Google Analytics