SHA256数据流

拉杰夫

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

拉蒙·J·罗梅罗和维吉尔

这是可以实现与MessageDigestSink.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
  }

这两个函数然后可以被施加到折叠中使用entityHttpResponse更新与所有的消化ByteString在实体值:

import akka.http.scaladsl.model.HttpResponse

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章