加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 数据流的SHA256

发布时间:2020-12-16 18:13:24 所属栏目:安全 来源:网络整理
导读:我有一个用例,我正在使用GET请求从URL下载文件.是否可以在不保存到磁盘或将整个对象保存在内存中的情况下计算文件流的SHA256? 解决方法 这可以通过 MessageDigest 和 Sink.fold 完成. 首先,我们需要一个函数来创建一个空摘要和一个用 ByteBuffer 更新摘要的
我有一个用例,我正在使用GET请求从URL下载文件.是否可以在不保存到磁盘或将整个对象保存在内存中的情况下计算文件流的SHA256?

解决方法

这可以通过 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
  }

然后可以在折叠中使用这两个函数,该折叠应用于HttpResponse的实体,以使用实体中的所有ByteString值更新摘要:

import akka.http.scaladsl.model.HttpResponse

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读