C++:Azure上上传文件的MD5值

2ekbmq32  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(113)

我看过Azure github的示例,您可以看到,当上传数据时,它使用流,并提供该流的md5哈希。
我的主要目的是上传文件到Azure并提供md5,如果本地md5和Azure计算的md5不匹配,它将返回一个错误。
我还知道我可以使用uploadFrom函数,该函数获取文件名并打开它,然后处理“分块”等操作。主要问题是它不允许我指定md5哈希,就像在upload情况下一样。uploadFrom接受不同类型的options结构,该结构没有TransactionalContentHash成员。
Azure中是否有任何功能允许我发送文件并提供md5?我知道我可以打开它并读取块,计算md5并逐个发送它们,但如果可能的话,我希望避免这种头痛。

ymdaylpp

ymdaylpp1#

这取决于你想做什么。如果你想做一个在线校验和计算器,这是不值得的。
如果你想这样做,最简单的方法可能是添加2个上传:一个文件(数据)和一个校验和文件(“控制”文件),当然还有输入验证,然后从那里开始,计算MD5并检查控制文件。
如果你想为另一个业务流程创建一个存储库,那么情况就不同了。公平地说,你所描述的根本不是设计验证流程的工作原理。你不需要向客户端询问数据,他们的校验和版本,然后你检查数据并验证两个校验和是否相同。背后的原因很简单:服务器 * 永远不应该 * 信任客户端。
想象一下这个场景:有数据。可能是文件或临时数据,无关紧要。我编辑了它(同样,目的是无关紧要的,我可以这样做破坏,为了好玩或因为我感染了恶意软件的数据),我知道新的校验和是不正确的,我知道你会抓住这一点。所以我所做的是我发送给你修改后的文件和新的校验和,不是我编辑之前的文件。现在你检查数据,发现校验和是相同的。你告诉我“谢谢你,先生,你很诚实,没有修改任何东西”。但我做了,我撒谎了,不是吗?:)
验证方法的真实的流程如下:
1.客户端事先同意了应该发送哪些数据,因此您有一个有效校验和的列表
1.客户端向服务器发送数据
1.服务器计算校验和并查看是否相同
1.如果不是,则拒绝数据;如果是,则进入下一步
现在我知道有些网站会在一个单独的文件中给予文件及其校验和,但这是相反的流程:服务器到客户端。理论上,客户端 * 可以 * 信任服务器。
不过,有一种方法的工作方式与您描述的方法类似:客户端将数据发送到服务器(或将数据分发到其他客户端的集中式服务),并且还发送一种校验和,服务器使用该校验和来验证在此过程沿着没有人改变它(例如MITM攻击)。
在这种情况下,您应该考虑安全传输(查找HTTPS和TLS)和数字签名(也查找证书公钥+私钥)。虽然这种模式通常用于Web服务,而不是文件上传,但如果文件在应用客户端加密后打包(例如在p7 s文件中),则可以实现。为此,您需要在服务器和客户端之间进行密钥交换。
小警告:MD5不安全。不要依赖它来处理敏感数据。

相关问题