Java 我想解密文本文件中的特定字符串并将其写入另一个文件
示例。日志包含Java 我想解密文本文件中的特定字符串并将其写入另一个文件,java,string,encryption,Java,String,Encryption,示例。日志包含 FLTR TID: 0000003756 RPC ID: 0000108159 Queue: Admin Client-RPC: 390626 USER: **[B@4783165b** Overlay-Group: 1 我需要这样 FLTR TID: 0000003756 RPC ID: 0000108159 Queue: Admin Client-RPC: 390626 USER: "DECRYPTED VA
FLTR TID: 0000003756 RPC ID: 0000108159 Queue: Admin Client-RPC: 390626 USER: **[B@4783165b** Overlay-Group: 1
我需要这样
FLTR TID: 0000003756 RPC ID: 0000108159 Queue: Admin Client-RPC: 390626 USER: "DECRYPTED VALUE" Overlay-Group: 1
使用密钥作为
String key = "ThisIsASecretKey";
这是我尝试过的,请编辑我写错代码的地方
public class Decrypt {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("sample.log"));
String newStr = null;
String value = "";
while ((newStr = br.readLine()) != null) {
String next = null;
if (newStr.contains("FLTR")) {
next = newStr.substring(97, 135); // this gets string **[B@4783165b**
String collect = CallToDecrypt(next, value);
system.out.println(collect);
}
}
pt.close();
br.close();
}
private static String CallToDecrypt(String next, String value) {
String key = "ThisIsASecretKey";
byte[] raw = key.getBytes(Charset.forName("US-ASCII"));
if (raw.length != 16) {
throw new IllegalArgumentException("Invalid key size.");
}
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
byte[] original = cipher.doFinal();
return new String(original, Charset.forName("US-ASCII"));
}
}
多亏了你们中的每一个人你们现在没有解密任何东西:字符串
next
从未在CallToDecrypt
例程中使用过
你必须做一些类似的事情
byte[] original = cipher.doFinal(next.getBytes());
用四个空格缩进代码,将其标记为代码。然后在函数中添加适当的缩进。@CodesInChaos。。。。我的代码中有什么错误导致我没有得到解密的值???抱歉,但加密/解密可能有大约50种错误。首先,数据甚至可能未正确加密,或者在处理过程中可能已损坏。(您正在解码的值是对非字符串对象执行
toString
操作的结果。)请修复,而不是发布相同的问题。@OlegEstekhin。。。。我修复了第一篇帖子,现在尝试解密,但有些地方丢失了…@DawnKeeper…我得到了类似于…线程“main”javax.crypto.IllegalBlockSizeException中的异常:在com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:750)上使用填充密码解密时,输入长度必须是16的倍数在com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)在com.sun.crypto.provider.aesciper.engineDoFinal(aesciper.java:313)在javax.crypto.Cipher.doFinal(Cipher.java:2087)在com.unisys.Decrypt.Decrypt.main(Decrypt.java:44)@Madiwalappa上学习加密。算法通常需要固定大小的数据块,这意味着您可能需要填充正在处理的最后一个数据块。