当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述如何使用 .NET Core 安全地加/解密文件#yyds干货盘点#相关的知识,希望能为你提供帮助。
前言由于客户网络安全限制,连接到互联网的设备不能访问内网。
需要先从客户端应用中导出数据到文件,再将文件复制到U盘,最后通过内网机器上传数据。
?如何保证,在复制、传输过程中,文件的安全性??
思路首先想到的是对文件进行加密。但是文件本身可能非常大,因此只能采取对称加密(AES)。
如果将对称加密的密钥存储在客户端的应用里,可能导致密钥泄露。
最好是每次加密都使用不同的AES密钥。
?现在的关键是,如何将这个随机AES密钥传输给解密方??
根据我们在《??请收藏!这可能是目前最安全的数据加密传输解决方案??》中的思路,我们可以采用RSA公钥加密AES密钥,并将其作为文件的一部分发给解密方。
加密文件将由以下几个部分组成:
- 256字节RSA加密后的AES密钥
- 16字节初始化向量
- AES加密的文件数据
实现理清了思路,让我们来看一下实现。
首先是加密代码:
(byte[] aesKey, byte[] aesIV) = AesHelper.Create();
using (var origFileStream = File.OpenRead("原始文件"))
using (var encryptFileStream = File.Create("加密文件"))
await encryptFileStream.WriteAsync(RSAHelper.Encrypt(aesKey));
await encryptFileStream.WriteAsync(aesIV);
using (var cryptoStream = AesHelper.CreateWriteStream(encryptFileStream, aesKey, aesIV))
await origFileStream.CopyToAsync(cryptoStream);
然后是解密代码:
using (var decryptFileStream = File.OpenRead("解密文件"))
using (var encryptFileStream = File.OpenRead("加密文件"))
var aesKeyData = https://www.songbingjia.com/android/new byte[256];
await encryptFileStream.ReadAsync(aesKeyData, 0, aesKeyData.Length);
var aesKey = RSAHelper.Decrypt(aesKeyData);
var aesIVData = https://www.songbingjia.com/android/new byte[16];
await encryptFileStream.ReadAsync(aesIVData, 0, aesIVData.Length);
var aesIV = aesIVData;
using (var cryptoStream = AesHelper.CreateReadStream(encryptFileStream, aesKey, aesIV))
await cryptoStream.CopyToAsync(decryptFileStream);
结论通过使用RSA+AES,?同时?保证了密钥和数据的安全性。
如果你也碰到了类似需求,不妨试试本文的实现方案。
?想了解更多内容,请关注我的个人公众号”My IO“?
【如何使用 .NET Core 安全地加/解密文件#yyds干货盘点#】
推荐阅读
- 基于Hadoop的产品大数据分布式存储优化
- 基于RK3399OpenHarmony富设备软件音频解码方案
- QT读取剪切板内容-实现复制粘贴文本和图片
- DVC - 数据版本控制入门详解
- 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化
- #yyds干货盘点# Map - LinkedHashSet&Map源码解析
- 一文了解 Python 中的对象析构函数(__del__)
- 阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec
- #yyds干货盘点# ant design中 table的表格行的拖拽实现