Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我想解密文本文件中的特定字符串并将其写入另一个文件_Java_String_Encryption - Fatal编程技术网

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上学习加密。算法通常需要固定大小的数据块,这意味着您可能需要填充正在处理的最后一个数据块。