import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 把字符串转换成十六进制的Unicode编码后保存,输出的
* 为每个字符的十六进制最后一位为前面一个字符的十六进、
* 制编码的最后一位。
* @author jzj
*/
public class Encrypt {
public static void main(String[] args) {
try {
//生成加密文件
//createEncryptFile();
//读取解密文件
System.out.println(decryptFromFile());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static StringBuffer decryptFromFile() throws FileNotFoundException, IOException {
String fileName;
StringBuffer fileContentSb;
//--读加密文件
fileName = "e:/tmp/encrypt.txt";
fileContentSb = readFile(fileName);
String fileConString = fileContentSb.toString();
Pattern p = Pattern.compile(".{4}");
Matcher m = p.matcher(fileConString);
String[] encryptArr = new String[fileConString.length() / 4];
int index = 0;
while (m.find()) {
encryptArr[index++] = m.group();
}
//解密
StringBuffer decryptSb = decrypt(encryptArr);
return decryptSb;
}
private static StringBuffer createEncryptFile() throws FileNotFoundException, IOException {
String fileName;
StringBuffer fileContentSb;
//--读源文件
fileName = "e:/tmp/source.txt";
fileContentSb = readFile(fileName);
//加密
String[] hexStrArr = encrypt(fileContentSb);
//--生成加密文件
fileName = "e:/tmp/encrypt.txt";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < hexStrArr.length; i++) {
sb.append(hexStrArr[i]);
}
writeFile(fileName, sb);
return fileContentSb;
}
private static void writeFile(String fileName, StringBuffer sb2) throws FileNotFoundException,
IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName));
osw.write(sb2.toString());
osw.close();
}
private static StringBuffer decrypt(String[] hexStrArr) {
StringBuffer sb2 = new StringBuffer();
for (int i = 0; i < hexStrArr.length; i++) {
char encryptChar = 0;
String prefixChar;
if (i != 0) {
prefixChar = hexStrArr[i - 1];
} else {
prefixChar = hexStrArr[hexStrArr.length - 1];
}
encryptChar = prefixChar.charAt(prefixChar.length() - 1);
sb2.append((char) (Integer
.parseInt(hexStrArr[i].replaceAll(".$", encryptChar + ""), 16)));
}
return sb2;
}
private static String[] encrypt(StringBuffer sb) {
//存储密文
String[] hexStrArr = new String[sb.length()];
for (int i = 0; i < sb.length(); i++) {
//加密字符
char encryptChar = 0;
//下一个字符
String nextString;
if (i != sb.length() - 1) {
nextString = Integer.toString(sb.charAt(i + 1), 16);
} else {
nextString = Integer.toString(sb.charAt(0), 16);
}
encryptChar = nextString.charAt(nextString.length() - 1);
//原有字符转成十六进制
String tmpstr = Integer.toHexString(((sb.charAt(i)) & 0x0000FFFF) | 0xFFFF0000)
.substring(4);
//把原来字符十六进制最后一位替换成下一个字符的最后一位
hexStrArr[i] = tmpstr.replaceAll(".$", String.valueOf(encryptChar));
}
return hexStrArr;
}
private static StringBuffer readFile(String fileName) throws FileNotFoundException, IOException {
InputStreamReader isr;
isr = new InputStreamReader(new FileInputStream(fileName));
char[] tmpCharArr = new char[1024];
int readCount = isr.read(tmpCharArr);
StringBuffer sb = new StringBuffer();
while (readCount != -1) {
sb.append(tmpCharArr, 0, readCount);
readCount = isr.read(tmpCharArr);
}
isr.close();
return sb;
}
}
分享到:
相关推荐
标准的现代维吾尔文字符集unicode编码表
// unicode: 返回一个字符的unicode编码 // 调用格式: ucode = unicode(char); // 参数: char:字符或字符串。为字符串时返回第一个字符的unicode编码 // 返回值: 整型。字符的unicode编码值 // 补充说明: 常用半角...
unicode字符编码表 可以用图片浏览器打开 全面详细 看起来方便得多
UnicodeCode编码转换成字符串编码的C#类 \uA054\uA055 => "中文
py代码-输入一个字符串,输出加密后的...每个字符的Unicode编码和下一个字符的Unicode编码相减, 用这个差的绝对值作为Unicode编码,对应的字符作为当前位置上字符的加密结果, 最后一个字符是和第一个字符进行运算。
用来得到字符 或汉字的Unicode编码 c语言编写
字符转换Unicode编码 HTML 转换 编码
一些设备串口通讯使用的是unicode,这时候我们解码就要使用unicode 编码包含的是中文,英文,俄文还是日文什么的,只要把它转换成Unicode就能被识别,而不用再考虑...unicode编码(UTF8)的十六进制 与字符 互相转换
字符Unicode标准编码计算器.zip
一个vbs脚本程序,练习之用,应用短除法将十进制转二进制,从而显示输入字符的二进制码,负数用补码表示。
Unicode 字符编码表,史上最全的Unicode 字符编码表,可以更好地让大家熟悉Unicode
通过对字符的unicode编码进行判断来确定字符是否为中文,要进行判断的字符串,要进行判断的第几个字符
运行环境Java JDK 5.0 Unicode字符转换为中文字符,中文字符转Unicode字符 Unicode字符只支持以\u####格式 <br>MS有人在找这东西,自己也找过,没找着就自己做了一个,功能简单只满足自己的需求:) pp
标准的unicode 编码表,提供的是现代维吾尔文的字母,标点符号等字符的编码
Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码Unicode编码
Fontcreate用Unicode编码下较完整的字符集分类压缩包
汉字字符编码 区位码 GB2312 GB18030-2005及Unicode 8.0字符集
Unicode字符编码表涵盖了所有字符码的范围和Unicode起始位。包含中文字符。
当需要对一个unicode十六进制字符串进行编码时,首先做的应该是确认字符集编码格式,在无法快速获知的情况下,通过一下的str4all方法可以达到这一目的