【问题标题】:Read file from shared path with Authentication as Java.io.File从共享路径读取文件,身份验证为 Java.io.File
【发布时间】:2019-11-22 19:19:28
【问题描述】:

我有一个只接受 java.io.File 对象的加密类(PGP Encryption util)。用于加密的内部方法(在 jar 中)仅接受 java.io.File 作为参数。

我需要从共享路径中读取一个文件,在该文件中身份验证需要访问和加密同一文件并写回同一共享路径。所以我使用 jcifs 进行文件读取。它以 SmbFile 格式读取文件。

我这里有两个疑问

1) 是否可以将 SmbFile 转换为 java.io.File,而不将内容写入实际文件(甚至不是临时文件)?并将 File 对象传递给文件加密方法,如下所示。

File someFile = ConvertSmbFileToFile(SmbFile smb);
pgpEncryptionService.encryptFile(someFile,true);

2) 如果上述不可行,是否可以使用 SmbFile 类型作为输入进行 PGP 加密?有人可以分享相关链接吗?

我的项目安全性只希望加密文件通过网络传输。因此,将 SmbFile 写入 java.io.File 似乎不是一种选择。 甚至写入临时文件就像允许未加密的数据通过网络层传输一样。所以临时文件也超出了范围。

【问题讨论】:

  • 您是否考虑过以经过身份验证的用户身份运行程序,从而“内置”访问共享?

标签: java java-io smb pgp jcifs


【解决方案1】:

SMB 3 及更高版本 (3.1.1) 支持加密/解密,因此您可以使用支持这些 SMB 方言的 SMB 库。 (SMB 3 支持 ccm 算法,3.1.1 支持 gcm)您只需要确保其他主机支持 SMB3 及以上。

如果我没记错的话,只有 Visuality Systems jNQ 产品支持这些 SMB 方言。

我认为 jCIFS 和 jNQ 支持 OutStreamInputStream 所以也许你可以使用它来代替 java.io.file

祝你好运

【讨论】:

    【解决方案2】:

    我假设目的是加密文件而不是加密 SMB 流量。那么解决方案可能是围绕 SmbFile 扩展 java.io.File 的包装类。我想你所需要的只是通过 SmbFile 的相同方法来实现 getInputStream() 。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多