字符串局部替换
有个需求对XML进行局部的加解密,现在首先想到的就是字符串的局部替换,先获取到所需要的解密的值,然后进行解密方法,然后进行字符串局部的替换,最后输出字符串。(也可以再次写入xml)。
直接上代码:
public static void main(String[] args) throws Exception {
// 局部字符串替換
File file = new File("C:/Users/ASUS/Desktop/xml.txt");
FileReader reader = new FileReader(file);
BufferedReader bReader = new BufferedReader(reader);
StringBuilder sBuilder = new StringBuilder();
String s = "";
while ((s = bReader.readLine()) != null) {
sBuilder.append(s + "\n");
// System.out.println(s);
}
String charString = "";
String charString1 = "";
String oldChar = "";
String newChar = "";
int k = 0;
String str = sBuilder.toString();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '=' && str.charAt(i + 1) == '"') {
for (int j = i; j > 0; j--) {
if (str.charAt(j) == ' ') {
k = j;
break;
}
}
charString = str.substring(k + 1, i);
// System.out.println(charString);
if (charString.equals("id") || charString.equals("name") || charString.equals("value")) {
for (int k1 = i + 3; k1 < str.length(); k1++) {
if (str.charAt(k1) == '"') {
// System.out.println(str.substring(k1));
oldChar = str.substring(i + 2, k1);
// System.out.println(oldChar);
newChar = getDectyptString(oldChar);
str = str.replace(oldChar, newChar);
break;
}
}
// System.out.println(charString);
}
}
}
System.out.println(str);
bReader.close();
// 字符串加解密輸出
String encryptString = getEnctyptString("openwire");
System.out.println(encryptString);
}
其中getEnctyptString(“openwire”); getDectyptString分别是BASE64加密的代码,源码为:
private static Key key;
private static String KEY_STR = "mykey";// 密钥
private static String CHARSETNAME = "UTF-8";// 编码
private static String ALGORITHM = "DES";// 加密类型
static {
try {
KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
generator.init(new SecureRandom(KEY_STR.getBytes()));
key = generator.generateKey();
generator = null;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public static String getEnctyptString(String str) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
byte[] bytes = str.getBytes(CHARSETNAME);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(bytes);
return base64Encoder.encode(doFinal);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
public static String getDectyptString(String str) {
BASE64Decoder base64Decoder = new BASE64Decoder();
try {
byte[] bytes = base64Decoder.decodeBuffer(str);
// Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(bytes);
return new String(doFinal, CHARSETNAME);
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
通过上述代码即可实现字符串的局部替换。