Golang Go语言中云盘系统如何设计文件加密

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言中云盘系统如何设计文件加密

存储层用分布式存储系统作为存储盘,保证了一传多备。但对存储安全性有要求,就是上传时,需要对文件进行加密,该选择一个什么样的加密方案,实现对(大)文件的加密的同时,确保时间效率相对较优。

目前我的疑问:

  1. 在上传和下载时 需要进行加密解密 市面上的网盘是如何保证上传后(大文件)可立即下载的(一般大文件都需要加密数 N 秒) 他们没有做文件的加密和解密 仅仅是通过访问控制确保文件安全的吗?
  2. 有什么方案 可以摆脱时间开销 的同时来进行文件加密

更多关于Golang Go语言中云盘系统如何设计文件加密的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复
  1. 文件分数据块
    2. 每块数据,单独加密
    3. 加密应合理分散分布,不应使用单一秘钥。
    4. 要考虑由于加密分散分布,导致的性能问题。

更多关于Golang Go语言中云盘系统如何设计文件加密的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢 我尝试尝试这种

大文件加密为什么要传完了再加?

可以上传时候加密,有些文件系统底层提供了加密,不需要应用层面加密。

可以参考 seafile 的相关设计,seafile 是开源的。

源码见:
https://github.com/haiwen/


它提供了对单个资料库进行加密的功能,相应的介绍如下:
https://cloud.seafile.com/published/seafile-manual-cn/security/security_features.md
当你创建一个加密资料库,你将为其提供一个密码。所有资料库中的数据在上传到服务器之前都将用密码进行加密。
加密流程:
1.生成一个 32 字节长的加密的强随机数。它将被用作文件加密秘钥(“文件秘钥”)。
2.用用户提供的密码对文件秘钥进行加密 (使用 PBKDF2 算法)。加密后的文件秘钥将会被发送到服务器并保存下来。
3.在文件同步的时候,先用用户输入的密码解密出文件秘钥,然后使用文件秘钥加密文件(使用 AES 256/CBC 算法),加密完后再上传文件。下载的时候,先用用户输入的密码解密出文件秘钥,然后使用文件秘钥解密文件。在上述过程中,你的密码将不会被传输到服务器上。

谢谢提供信息,加密策略感觉很有参考价值。我选型的项目还是与之有区别的,对于 C/S 架构可能很好实现,但我实现的是 B/S 结构,使用 js 来实现加密解密。

在Golang中设计云盘系统的文件加密功能,可以遵循以下专业建议:

首先,利用Golang的加密库。Golang提供了crypto/ciphercrypto/des等内置加密包,可轻松实现文件加密。例如,DES加密算法就常被用于文件加密操作。

其次,考虑文件加密的具体实现方式。一种常见的方法是,读取原始文件内容,创建加密块和加密流,然后对文件进行加密处理,并输出加密后的文件。相应的,解密过程也需要读取加密文件内容,创建解密流,还原出原始文件。

此外,在加密过程中,还可以采用一些增强安全性的措施。比如,通过混淆和构造随机的字节映射表来实现文件的加密,同时在文件头部和尾部各插入一段固定长度的随机字节用于混淆,增加破解难度。

最后,需要注意的是,加密文件时应确保密码的强度,避免使用简单密码,同时妥善保管密码。对于加密后的文件,可以基于SHA256等散列算法进行校验,确保加密和解密过程的正确性。

综上所述,在Golang中设计云盘系统的文件加密功能时,应充分利用Golang的加密库,结合具体实现方式和安全性措施,确保文件数据的安全性和完整性。

回到顶部