Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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_Security_Encryption - Fatal编程技术网

Java 验证文件-安全问题

Java 验证文件-安全问题,java,security,encryption,Java,Security,Encryption,我有一个名为a.txt的文件,我在java应用程序中使用它。此文件与应用程序一起提供,我希望有一种方法(在应用程序中)验证它确实是我的文件,而不是伪造的文件 我有两个想法,但都容易受到攻击: 我将签名、A.txt和公钥作为纯文本发送到应用程序中,但如果攻击者只是对自己的文件进行签名,替换签名、A.txt和公钥,验证将通过 我将公钥硬编码到java应用程序中-除了反编译之外,如果我将A.txt发送给人员A,将B.txt发送给人员B,并且他们交换了txt,他们都将成功验证,我更希望人员A仅成功验证A

我有一个名为a.txt的文件,我在java应用程序中使用它。此文件与应用程序一起提供,我希望有一种方法(在应用程序中)验证它确实是我的文件,而不是伪造的文件

我有两个想法,但都容易受到攻击:

  • 我将签名、A.txt和公钥作为纯文本发送到应用程序中,但如果攻击者只是对自己的文件进行签名,替换签名、A.txt和公钥,验证将通过

  • 我将公钥硬编码到java应用程序中-除了反编译之外,如果我将A.txt发送给人员A,将B.txt发送给人员B,并且他们交换了txt,他们都将成功验证,我更希望人员A仅成功验证A.txt


  • 我怎样才能做到这一点而不被攻击?或者我如何实现我的方法以使它们安全?

    在代码中隐藏加密密钥可能非常危险。Reinard对能够加密和解密文件的web服务有很好的了解

    另一种选择可能是将密钥隐藏在注册表中或隐藏目录中的某个位置。您还可以尝试构建自己的算法来构建解密密钥

    但是反编译呢?对于大多数开发人员来说,这一直是一个主要的难题。如何在代码中正确隐藏秘密?您可以尝试使用可以减慢反编译过程的应用程序打包程序或扰码器。您还可以得到一个java模糊器,使代码更难进行反向工程


    我真的希望这能有所帮助。

    一个安全的方法是让第三方web服务对文件进行加密和解密。虽然您不能100%保证,但可以在文件上运行md5或类似程序来验证它生成的哈希代码。如果有一个与hashcode相同的文件,那么它将是一个完全不同的文件,可能无法正常工作。加密它,然后在程序中解密,这将减少发生错误的机会attack@nafas此方法的攻击与1)完全相同@JamesKPolk Yes,“如何处理此问题?”