首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebCrypto API加密大文件

使用WebCrypto API加密大文件
EN

Stack Overflow用户
提问于 2019-12-28 20:46:19
回答 1查看 1.4K关注 0票数 6

我试图使用WebCrypto API加密大文件(> 1GB)。

加密小文件很好,但是当我试图加密大文件时,我的浏览器挂起,而且加密似乎永远不会结束。

我认为最好的选择是读取和加密文件块,而不是在读取时合并这些块。

这里有人有加密和合并块的经验吗?如果是这样的话,如果有人能给我举个例子或者给我指点正确的纠正,我会非常感激。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2019-12-29 01:00:43

显然,高级WebCrypto API的设计没有考虑到流/大消息。但是,如果您查看常见的密码操作模式,您会发现可以使用不同的模式来连接不同的密文并获得完整的密文。

您可以使用AES-CBC作为一个1 MiB块(或任何16字节的倍数),并使用第一个到最后16个字节的密文作为IV加密下一个块。您将不得不关闭最后一个块,因为它包含任何块的加密填充,当然,最后一个块除外。不幸的是,这不是一种完整性/身份验证模式,其结果很容易受到填充oracle的攻击,所以我仍然不推荐它。此外,由于您取消填充,您不能使用相同的方法解密。

类似地,您可以在计数器上使用计数器模式,从计数器值<nonce>|0000000000000000开始,然后在1 MiB继续使用计数器值<nonce>|0000000000010000加密(因为1 MiB包含65536块)之后,然后在2 MiB之后使用<nonce>|0000000000020000等等。在前一个IV /初始计数器块中,nonce是一个唯一的8字节值。该密码在加密和解密之间具有完美的对称性,不使用填充。但是,它很容易受到对手变化的影响;基本上,敌手可以翻转密文中的任何字节,从而翻转明文中的任何字节。这也可能导致更多的明文预言和泄漏更多的信息。

请注意,对于像GCM这样的AEAD密码,您不能做同样的事情。在这种情况下,您需要使用nonce和身份验证标记展开密文。但是,您仍然可以加密1 MiB,并将其扩展到12字节的时间、1 MiB的密文和16字节的身份验证标记。然后,您可以使用更大的块大小解密,并获得1个MiB明文块返回。请注意,您仍然必须对身份验证标记执行MAC,否则攻击者可能会重新排序1 MiB + 28B大小的块。一种方法是使用身份验证标记作为AAD输入执行0字节GCM加密。

哇,我想这就是你在原意之外使用API的原因吧。这是完全可能的,但是是的,我想需要做一些研究。

这里使用1 MiB来表示1024x1024字节,或1024 KiB。巨无霸意味着百万,不是-呃,我又一次忘记了确切的数量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59514734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档