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

前期代码是这样子的:

/*** 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

Java 两个中文字符串异或问题相关推荐

  1. python--计算两个中文字符串的编辑距离

    #计算两个中文字符串的编辑距离 def levenshtein(string1,string2):if len(string1) > len(string2):string1,string2 = ...

  2. Java正则判断中文字符串句型_NLP中文句子类型判别和分类实现

    目录 一.中文句子类型主要类别 1.陈述句(statement) 主语为首(subject_front),例:大家对这件事都很热心 主题为首(theme_front),例:红绿灯,真好玩 复合句(co ...

  3. java 计算包含中文字符串的真实长度

    public static int getRealLength(String str) {int m = 0;char arr[] = str.toCharArray();for (int i = 0 ...

  4. Java 生成固定长度随机中文字符串

    /*** * 生成固定长度随机中文,kuojung * @param n 中文个数 * @return 中文串 */ public static String getRandomChineseStri ...

  5. jni 传递字符串到java_Android JNI开发-java与c++其间的中文字符串传递

    Android JNI开发---java与c++之间的中文字符串传递 最近在做一个Android电子词典,其中在从词库中读取词条时,用到了jni---java调用c++;在java代码里调用本地方法时 ...

  6. java 中文相似度6_确定中文字符串的相似度解决方案

    分析 最简单的问题求解 字符串由一组不同含义的单词组成,它不同于数值型变量,可以用一个特定的数值来确定它的大小或位置,所以用何种方式来描述两个字符串之间的距离,成为了一个值得探讨的问题. 通常情况下, ...

  7. java 中文 音序,java 中文字符串数组按照音序排列

    java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...

  8. [转载] 用Java语言实现对十六进制字符串异或运算

    参考链接: 交换两个字符串,而无需在Java中使用第三个用户定义的变量 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作.相信很多上班族都会有这种感觉.最近对NFC进行写卡操作,需要计算一 ...

  9. Java 中文字符串编码之GBK转UTF-8

    一.乱码的原因 gbk的中文编码是一个汉字用[2]个字节表示,例如汉字"内部"的gbk编码16进制的显示为c4 da b2 bf utf-8的中文编码是一个汉字用[3]个字节表示, ...

最新文章

  1. Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer
  2. 浓缩精华的架构演进过程,我连看了六遍!
  3. c语言遍历字符串数组的方法
  4. Iphone4涨到2万,相对VERTU有里子,面子也便宜
  5. scala入门--快学scala第一章练习题
  6. JStrom 入门(三) 上传jar文件并启动流程
  7. windows下配置java
  8. html text 默认选中,html - 如何在Shiny中默认选择verbatimTextOutput中的文本? - SO中文参考 - www.soinside.com...
  9. totolinkn200up怎么设置_totolinkN200R无线路由器如何设置啊,求高人指点
  10. 笑郭网络验证3.8研究笔记(内有视频教程)
  11. 本地gradle使用
  12. selenium自动化之元素高亮显示
  13. 扫地机器人水箱背景_家友扫地机器人拖地水箱配件(米家扫地机器人1代版)体验(Case Closed)...
  14. js 正则表达式 判断车牌号
  15. SQL Server 查询分析器提供的所有快捷方式(快捷键)
  16. 微信表情图像代表什么意思_微信表情含义图解大全(微信58个表情含义图)
  17. 请熟悉SQL server的高手赐教。
  18. Android 实现Home按键功能的两种方式
  19. 服务器如何管理和维护,运维人员是如何管理上千台服务器的?
  20. php下载MP4视频

热门文章

  1. 首页滑滑滑,支付宝穿越回年轻样子
  2. csdn 博客插入gif动画
  3. boost asio——基于协程的TCP服务器
  4. 大四最后一个学期去公司实习前2天的一点感悟
  5. 你好,世界:第一个Java程序(《Java与Python学习通法》)
  6. CGCTF平台web题writeup
  7. Java将Excel转换为ODS
  8. 慕容话币:币圈投资缺点无处遁形,保持良好的心态有多难?
  9. 嫦娥五号搭载的激光雷达有什么用途?
  10. CANoe.DiVa操纵指南——CANoe.DiVa配合vTestStudio进行高覆盖的测试