Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.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_Android_Android Studio_Cryptography_File Sharing - Fatal编程技术网

Java 文件共享与加密,如何将密钥也安全地发送给接收方?

Java 文件共享与加密,如何将密钥也安全地发送给接收方?,java,android,android-studio,cryptography,file-sharing,Java,Android,Android Studio,Cryptography,File Sharing,我的系统有问题。我的应用程序基本上可以做4件事: 发送任何文件(甚至加密) 加密任何文件 接收传入文件 解密加密文件 我的问题是,接收者收到加密文件后,必须输入一个密钥对其进行解密,如果来自发送方的原始密钥等于或不等于来自接收方的输入,而接收方没有获得有关密钥的任何信息,那么如何创建条件语句,因为它们是同一应用程序,但接收方应用程序不知道该特定字符串 我所能想到的就是创建一个包含密钥的文本文件,并让接收者读取该文件的内容以获取密钥,最终只用于密钥的条件匹配。我很困惑,但我看到它在一个叫做ES文件

我的系统有问题。我的应用程序基本上可以做4件事:

  • 发送任何文件(甚至加密)
  • 加密任何文件
  • 接收传入文件
  • 解密加密文件
  • 我的问题是,接收者收到加密文件后,必须输入一个密钥对其进行解密,如果来自发送方的原始密钥等于或不等于来自接收方的输入,而接收方没有获得有关密钥的任何信息,那么如何创建条件语句,因为它们是同一应用程序,但接收方应用程序不知道该特定字符串


    我所能想到的就是创建一个包含密钥的文本文件,并让接收者读取该文件的内容以获取密钥,最终只用于密钥的条件匹配。我很困惑,但我看到它在一个叫做ES文件浏览器的android应用程序中工作。我使用ES file explorer加密了一个文件,然后与SHAREit一起发送,然后用另一部手机解密,当我输入错误的密钥时,应用程序知道我输入的密钥是错误的,没有internet。

    有两种常见的方法来确定是否使用了正确的加密密钥:

    • HMAC(散列消息身份验证码)-加密您的文件,然后通过HMAC运行它(通常使用SHA256或来自SHA系列的其他文件)。在加密文件前添加结果哈希始终在加密后应用HMAC。然后,接收器可以计算相同的HMAC,以确定他们使用的密钥是否正确。记住使用时间安全比较函数来比较结果哈希,以避免定时攻击
    • AEAD块模式-加密时,使用块模式,如GCM或CCM。这是首选方案。这些块模式为您处理所有数据身份验证。GCM通常是首选。然而,这里需要仔细地生成nonce,因为使用相同的nonce/密钥对进行两种不同的加密操作可能会泄漏明文

    编辑:请查看我的答案,其中详细说明了解决您所问问题的安全方法。

    谢谢!你的答案是最正确的,但我认为我还没有足够的知识和编程技能来充分利用你所说的方式。我实际上是一名学生,我肯定会感谢你提到的步骤的任何教程。谢谢你,先生!不用担心,请看我的编辑。链接答案中的代码详细说明了在GCM模式下加密文件的安全方法。@LukePark登录后在加密后应用哈希(加密文件)?@JAAAY我不明白你在问什么对不起?@LukePark你说“加密后始终应用HMAC”。这样做的目的是什么?对我来说,只有将其应用于原始文件而不是加密文件时,这才有意义