Java 两个中文字符串异或问题

为了项目需要,之前没做过异或加密的我在网上看了很多这类的文章,一开始异或成功了,可是突然有一天字符串里面要加中文,然后莫名的就编码错误,无效的编码,苍了天了,又看了一些资料,基本上没怎么提过中文的问题,于是乎又开始新一轮试验。

前期代码是这样子的:

/**
     * xor操作
     * @param h 加密串
     * @param key   密钥
     * @return
     */
    public static String eh(String h,String key) {
        int l1 = h.length();
        int l2 = key.length();
        String r = "";
        for (int i = 0; i < l1; i = i + l2) {
            int j = i + l2;
            if (j >= h.length())
                j = h.length();
            r += xor(h.substring(i, j), key);
        }
        String s = Base64.encodeToString(r.getBytes(), Base64.DEFAULT);
        return s;
    }

    public static String xor(String s1, String s2) {
        byte b1[] = s1.getBytes();
        byte b2[] = s2.getBytes();
        byte lb[], sb[];
        lb = b1.length >= b2.length ? b1 : b2;
        sb = b1.length >= b2.length ? b2 : b1;
        byte rb[] = new byte[sb.length];
        int i = 0;
        for (; i < sb.length; i++) {
            rb[i] = (byte) (sb[i] ^ lb[i]);
        }
        return new String(rb);
    }

这段是key的字符串如果短一点话需要对加密的字符串进行截取与key做xor运算,并且拼装每一段结果。

这段代码在没有中文的时候是没问题的,有了中文编码问题以后,代码改成了这样。

/**
	 * xor加密
	 * @param str
	 * @return
	 */
	public static String XorEncryptAndBaseNew(String str) {
		LogUtil.i("post headData = "+str);
		byte[] b1 = str.getBytes();
		byte[] b2 = Constants.DEBUG_HEAD_KEY.getBytes();
		byte[] out = new byte[b1.length];
		for (int i = 0; i < b1.length; i++) {
			out[i] = (byte) (b1[i] ^ b2[i % b2.length]);
		}
		return android.util.Base64.encodeToString(out, android.util.Base64.NO_WRAP);
	}

返回的时候还加了个base64编码,简单明了还不会有编码问题。

如果要做两个字符串加密的话 直接用后者就行。

参考文章:http://blog.csdn.net/yin_jw/article/details/47422439


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值