gpt4 book ai didi

scala - 数据流的 SHA256

转载 作者:行者123 更新时间:2023-12-05 00:15:08 28 4
gpt4 key购买 nike

我有一个用例,我使用 GET 请求从 URL 下载文件。是否可以在不保存到磁盘或将整个对象保存在内存中的情况下计算文件流的 SHA256?

最佳答案

这可以通过 MessageDigest 来完成。和 Sink.fold .

首先,我们需要一个创建空摘要的函数和一个更新带有 ByteBuffer 的摘要的函数。 :

import java.security.MessageDigest
import java.nio.ByteBuffer

def emptySHA256Digest : MessageDigest = MessageDigest getInstance "SHA-256"

val updateDigest : (MessageDigest, ByteBuffer) => MessageDigest =
(messageDigest, byteBuffer) => {
messageDigest update byteBuffer
messageDigest
}

然后可以在应用于 entity 的折叠中使用这两个函数。的 HttpResponse用所有 ByteString 更新摘要实体中的值:
import akka.http.scaladsl.model.HttpResponse

val responseBodyToDigest : HttpResponse => Future[MessageDigest] =
(_ : HttpResponse)
.entity
.dataBytes
.map(_.asByteBuffer)
.runFold(emptySHA256Digest)(updateDigest)

关于scala - 数据流的 SHA256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com