`
badboy_blue
  • 浏览: 48469 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

string、byte、位运算碰到问题

    博客分类:
  • java
阅读更多

情景:java对byte[]做^实现加密,C对Char[]做^运算来解密。

错误:

加密,java中对原文转换成byte数组,然后做^运算,这个过程中将返回结果做了一次new String(),得到加密结果。

解密,getBytes()拿到密文,然后做^运算,打印发现结果不是原文了。

 

原因,new String()会抛弃编码中不存在的byte,处理latin1编码兼容所有的。故去掉中间new String()的步骤就可以了。

 

/**
	 * 加密
	 * @param str
	 * @param srclen
	 */
	public static byte[] cbt_crypt(String str, int srclen) {
		int i;
		int j=0;
		String tmp = "badboy_blue";
		byte[] key = tmp.getBytes();
		byte[] stri = str.getBytes();
		for (i=0;i<srclen;i++){
			stri[i]^=key[j];
			j=(j+1)%8;
		}
		return stri;
	}
	
	/**
	 * 解密
	 * @param str
	 * @param srclen
	 * @param pos
	 * @return
	 */
	public static byte[] cbt_crypt(byte[] str, int srclen, int pos)
	{
		int i;
		int j=pos%8;
		String tmp = "badboy_blue";
		byte[] key = tmp.getBytes();
		for (i=0;i<srclen;i++) {
			str[i]^=key[j];
			j=(j+1)%8;
		}
		return str;
	}
 

另外附个byte[]和String之间转换信息丢失的问题:

http://blog.csdn.net/xiongyucai/archive/2008/05/23/2472662.aspx

分享到:
评论

相关推荐

    java中String_十六进制String_byte[]之间相互转换

    这段代码首先创建一个`ByteArrayOutputStream`对象用于存放结果,然后遍历十六进制字符串,每两个字符表示一个字节,通过位运算转换为字节值并添加到`ByteArrayOutputStream`中。 #### 四、byte[]到十六进制String...

    Java中的位运算

    ### Java中的位运算 #### 一、概述 位运算(Bitwise Operators)是计算机科学中的一个基础概念,它直接作用于二进制位上。在Java语言中,位运算符可以应用于所有整型数据类型,如`long`、`int`、`short`、`char`和...

    JAVA位运算.pdf

    ### JAVA位运算详解 在Java编程中,位运算是一门精细的艺术,涉及到对整数类型的二进制位进行直接操作。这些操作不仅能够优化代码执行效率,还常用于实现特定的算法需求。本文将深入探讨Java中的位运算,包括位...

    十六进制字符串按位异或运算工具和java位异或运算

    在计算机科学中,十六进制(Hexadecimal)是一种逢16进1的进位制,通常用于表示二进制数据,因为每个十六进制数字可以代表4...通过理解其原理并掌握在Java中的实现方式,我们可以更有效地解决各种与位运算相关的问题。

    hex2byte byte2hex

    - 遍历输入数组`b`,对于每一个`byte`,先通过位运算`& 0xFF`确保只考虑低八位有效值,然后调用`Integer.toHexString()`方法将其转换为十六进制字符串。 - 如果转换得到的字符串长度为1,则在其前面添加一个"0"以...

    Go-此工具用于将16进制字符串转换成10进制byte数组

    - **10进制byte数组**:在计算机中,byte是数据的基本单位,它通常代表8位二进制。10进制byte数组是包含多个字节的序列,每个字节可以是0到255的10进制值。 2. **Go语言中的转换方法** - **使用`hex`包**:Go的...

    switch语句能否作用在byte上,能否作用在long上,能否作用在String上

    下面我们将详细讨论`switch`语句对`byte`、`long`和`String`的支持情况。 首先,对于`byte`类型,由于`byte`可以直接隐式转换为`int`类型,因此在`switch`语句中是可以使用的。这意味着如果你有一个`byte`变量,你...

    byte数组转化为hex

    public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { // 将字节转换为16进制的两个字符 int halfByte = (b & 0xF0) &gt;&gt; 4; int byteVal = (b & ...

    MD5加密与byte数组与16进制相互转换

    包含MD5加密,同时拥有多种方式进行byte或者byte[]与16进制相互转换 三种方式: 方式一:Integer.toHexString(int) 对应的是: Integer.parseInt(String, int)或者Integer...方式二:位运算(& 与 |) 方式三:算术运算

    java byte数组与int,long,short,byte的转换实现方法

    这个方法首先逐个提取字节,并通过位移和按位或运算将它们组合成一个`int`,然后与0xFFFFFFFFL进行按位与操作,以确保结果始终为32位无符号整数。 对于`short`到`byte`数组的转换,`shortToByteArray`方法将16位的`...

    学习文档_JAVA中Integer和Byte转换.doc

    在进行位运算时,Java会将byte类型自动扩展为int类型进行操作,这是因为byte的范围较小,位运算需要更大的数据类型来容纳结果。 以下是一个将4字节数组转换为有符号整数的方法: ```java int ByteToSignedInt(byte...

    基于Java BigInteger类的大整数运算应用.pdf

    大整数运算是计算机科学和数学中一个重要的研究方向,许多应用场景都需要高精度的计算,例如精确到100位的小数的黄金分割系数计算、大素数问题、梅森素数问题等。Java提供的BigInteger类可以较好地解决这些问题。...

    使用位运算、值交换等方式反转java字符串(四种方法)

    使用位运算、值交换等方式反转java字符串(四种方法) 在 Java 中,字符串反转是非常常见的操作,今天我们将介绍四种不同的方法来反转 Java 字符串,包括使用位运算、值交换等方式。 1. 使用 StringBuilder 的 ...

    Java变量与数据类型、数据运算中易混知识点总结

    在数据运算方面,Java支持算术运算、关系运算、逻辑运算、位运算和赋值运算。算术运算包括加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)等。关系运算符如大于(&gt;)、小于(&lt;)、等于(==)等用于比较两个...

    java中基本类型及string类型

    - `float`:占用4字节,提供约7位有效数字精度,通常用于需要小数点计算但对精度要求不高的场景。 - `double`:占用8字节,精度高于`float`,默认浮点型。 3. **字符型**: - `char`:占用2字节,表示单个字符,...

    高精度运算讲解ppt

    本文将深入探讨高精度运算的基本概念、涉及的问题及一个具体的高精度加法的实现方法。 首先,我们要了解不同数据类型及其数值范围。在常见的编程语言中,有如下几种基本的数据类型: 1. 字节(Byte):0 .. 255,...

    基于java中byte数组与int类型的转换(两种方法)

    注意,由于`byte`类型的范围是 `-128` 到 `127`,在进行位运算时可能会丢失高8位,因此需要使用`& 0xff`来保留低8位。 ### 方法二:使用`DataInput`和`DataOutput`流 ```java public static void main(String[] ...

    Encrypt_an_string_src.rar_源码

    private static byte[] EncryptStringToBytes(string plainText, byte[] key, byte[] iv, DESCryptoServiceProvider des) { // 加密逻辑 } } ``` 对于RC2算法,代码结构类似,只需将DESCryptoServiceProvider...

    java 位操作集合以及应用技巧

    2. 高效计算:位操作通常比算术运算更快,例如通过位运算快速求两数最大公约数和最小公倍数。 3. 数字掩码:通过位与操作,可以方便地检查或设置特定位,如权限控制、颜色编码等。 4. 位翻转:通过按位异或操作,...

    silverlight 自定义加密

    为了解决上述问题,本节将介绍一种基于位运算的简单自定义加密方法。这种方法的核心在于利用C#中的按位运算符(`&`、`|` 和 `^`)来实现加密和解密过程。 ##### 位运算基础 - **按位与运算(`&`)**:两个对应的二...

Global site tag (gtag.js) - Google Analytics