字符串的局部替换----配置文件加密

字符串局部替换

有个需求对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);
		}
	}

通过上述代码即可实现字符串的局部替换。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值