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
Java 两个中文字符串异或问题相关推荐
- python--计算两个中文字符串的编辑距离
#计算两个中文字符串的编辑距离 def levenshtein(string1,string2):if len(string1) > len(string2):string1,string2 = ...
- Java正则判断中文字符串句型_NLP中文句子类型判别和分类实现
目录 一.中文句子类型主要类别 1.陈述句(statement) 主语为首(subject_front),例:大家对这件事都很热心 主题为首(theme_front),例:红绿灯,真好玩 复合句(co ...
- java 计算包含中文字符串的真实长度
public static int getRealLength(String str) {int m = 0;char arr[] = str.toCharArray();for (int i = 0 ...
- Java 生成固定长度随机中文字符串
/*** * 生成固定长度随机中文,kuojung * @param n 中文个数 * @return 中文串 */ public static String getRandomChineseStri ...
- jni 传递字符串到java_Android JNI开发-java与c++其间的中文字符串传递
Android JNI开发---java与c++之间的中文字符串传递 最近在做一个Android电子词典,其中在从词库中读取词条时,用到了jni---java调用c++;在java代码里调用本地方法时 ...
- java 中文相似度6_确定中文字符串的相似度解决方案
分析 最简单的问题求解 字符串由一组不同含义的单词组成,它不同于数值型变量,可以用一个特定的数值来确定它的大小或位置,所以用何种方式来描述两个字符串之间的距离,成为了一个值得探讨的问题. 通常情况下, ...
- java 中文 音序,java 中文字符串数组按照音序排列
java 中文字符串数组按照音序排列 复制代码 代码如下: public class SortComparator implements Comparator{ public int compare( ...
- [转载] 用Java语言实现对十六进制字符串异或运算
参考链接: 交换两个字符串,而无需在Java中使用第三个用户定义的变量 前言:好久没有写博客,最近一年感觉真是好忙,各种做不完的工作.相信很多上班族都会有这种感觉.最近对NFC进行写卡操作,需要计算一 ...
- Java 中文字符串编码之GBK转UTF-8
一.乱码的原因 gbk的中文编码是一个汉字用[2]个字节表示,例如汉字"内部"的gbk编码16进制的显示为c4 da b2 bf utf-8的中文编码是一个汉字用[3]个字节表示, ...
最新文章
- Self-Attention 加速方法一览:ISSA、CCNet、CGNL、Linformer
- 浓缩精华的架构演进过程,我连看了六遍!
- c语言遍历字符串数组的方法
- Iphone4涨到2万,相对VERTU有里子,面子也便宜
- scala入门--快学scala第一章练习题
- JStrom 入门(三) 上传jar文件并启动流程
- windows下配置java
- html text 默认选中,html - 如何在Shiny中默认选择verbatimTextOutput中的文本? - SO中文参考 - www.soinside.com...
- totolinkn200up怎么设置_totolinkN200R无线路由器如何设置啊,求高人指点
- 笑郭网络验证3.8研究笔记(内有视频教程)
- 本地gradle使用
- selenium自动化之元素高亮显示
- 扫地机器人水箱背景_家友扫地机器人拖地水箱配件(米家扫地机器人1代版)体验(Case Closed)...
- js 正则表达式 判断车牌号
- SQL Server 查询分析器提供的所有快捷方式(快捷键)
- 微信表情图像代表什么意思_微信表情含义图解大全(微信58个表情含义图)
- 请熟悉SQL server的高手赐教。
- Android 实现Home按键功能的两种方式
- 服务器如何管理和维护,运维人员是如何管理上千台服务器的?
- php下载MP4视频