我有一个加密类(PGP Encryption util),该类仅接受java.io.File对象。用于加密的内部方法(在jar中)仅接受java.io.File作为参数。
我需要从共享路径中读取文件,在该文件中,需要进行身份验证才能访问和加密相同的文件,然后写回相同的共享路径。所以我正在使用jcifs进行文件读取。它将文件读取为SmbFile格式。
我在这里有2个疑问
1)是否可以将SmbFile转换为java.io.File,而无需将内容写入实际文件(甚至不是临时文件)?并将File对象传递给文件加密方法,如下所示。
File someFile = ConvertSmbFileToFile(SmbFile smb);
pgpEncryptionService.encryptFile(someFile,true);
2)如果以上都不可行,是否可以使用SmbFile类型作为输入进行PGP加密?有人可以分享相关链接吗?
我的项目安全性只希望加密文件通过网络传输。因此,将SmbFile写入java.io.File似乎不是一种选择。 甚至写入临时文件都类似于允许未经加密的数据通过网络层传输。因此临时文件也超出了范围。
答案 0 :(得分:0)
SMB 3及更高版本(3.1.1)支持加密/解密,因此您可以使用支持这些SMB方言的SMB库。 (SMB 3支持ccm算法,而3.1.1支持gcm),只需确保其他主机支持SMB3及更高版本。
如果我没记错的话,只有Visuality Systems jNQ产品支持这些SMB方言。
我认为jCIFS和jNQ支持OutStream
和InputStream
,所以也许您可以使用它代替java.io.file
祝你好运
答案 1 :(得分:0)
我假设目的是加密文件而不是加密SMB通信。然后,解决方案可能是围绕SmbFile的包装类,该包装类扩展了java.io.File。我猜您只需要通过SmbFile的相同方法来实现getInputStream()。