前言

由于客户网络安全限制,连接到互联网的设备不能访问内网。

需要先从客户端应用中导出数据到文件,再将文件复制到U盘,最后通过内网机器上传数据。

如何保证,在复制、传输过程中,文件的安全性?

思路

首先想到的是对文件进行加密。但是文件本身可能非常大,因此只能采取对称加密(AES)。

如果将对称加密的密钥存储在客户端的应用里,可能导致密钥泄露。

最好是每次加密都使用不同的AES密钥。

现在的关键是,如何将这个随机AES密钥传输给解密方?

根据我们在《请收藏!这可能是目前最安全的数据加密传输解决方案》中的思路,我们可以采用RSA公钥加密AES密钥,并将其作为文件的一部分发给解密方。

加密文件将由以下几个部分组成:

  • 256字节RSA加密后的AES密钥

  • 16字节初始化向量

  • AES加密的文件数据

解密方首先读取并使用RSA私钥解密出AES密钥,再用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 = new byte[256];await encryptFileStream.ReadAsync(aesKeyData, 0, aesKeyData.Length);var aesKey = RSAHelper.Decrypt(aesKeyData);var aesIVData = 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 安全地加/解密文件相关推荐

  1. linux gpg加密文件夹,如何使用 GPG 加解密文件

    目标:使用 GPG 加密文件 发行版:适用于任何发行版 要求:安装了 GPG 的 Linux 或者拥有 root 权限来安装它. 难度:简单 约定: # - 需要使用 root 权限来执行指定命令,可 ...

  2. java gcm_Android 用java现实AES-GCM 加解密文件

    2.以下是Android gcm加密解密的demo(加解密文件大小为192M大小的apk): public class AES128SymmetricDecryption { private stat ...

  3. linux证书存放路径,利用Tar和OpenSSL轻松加/解密文件和目录

    众所周知要想保护数据的安全比较简单快捷的方法无疑是给文件和目录进行加密的操作.相比于Windows给文件和目录进行加/解密的操作,在Linux上进行加/解密文件和目录要复杂一点.那么我们到底有没有什么 ...

  4. IP-Guard自动加解密文件夹支持多目录使用说明

    自动加解密文件夹支持多目录使用说明 一.功能介绍 在控制台客户端配置设置decrypt_files和encrypt_files这两条策略可以实现指定文件夹自动解密文件和自动加密文件的功能.策略设置时支 ...

  5. ASP.NET Core 数据加解密的一些坑

    点击蓝字 关注我 ASP.NET Core 给我们提供了自带的Data Protection机制,用于敏感数据加解密,带来方便的同时也有一些限制可能引发问题,这几天我就被狠狠爆了一把 我的场景 我的博 ...

  6. java加密解密代码_java加解密文件公用方法整合(多看一本书,少写三行代码)

    最近接到任务(文件的安全性)需要在文件上传到服务器上时将文件加密保存, 用户下载时将文件解密后返回给用户.翻了下方法最后决定用java中的Cipher类来完成(里面的实现方式挺全的). 上手实现.po ...

  7. 国密SM2算法加解密文件

    对文档进行加密操作,只有经过系统解密后才能进行查看文档内容 这里使用hutool工具类提供的SM2方法,首先引入pom.xml依赖 hutool文档地址 <!--工具类--> <de ...

  8. python杂记-RSA加解密实现(4)-加解密消息及文件

    3.消息m分段与非负整数n之间的互相转换 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #2-10-3-6.py import base64 impor ...

  9. Excel VBA高效办公应用-第十六章-VBA高效文件操作(同时给多个工作簿加解密)

    本示例演示了批量加解密文件操作. Option ExplicitPrivate Sub ComboBox1_Change()'增加列表框的选项 ListBox1.AddItem ComboBox1.T ...

最新文章

  1. GPU与CPU交互技术
  2. 循环前增加和后增加之间的区别?
  3. 一篇博客带你轻松应对Springboot面试
  4. Grails with ATS Transformation tutorial with a demo example
  5. 数据降维(PCA、KPCA、PPCA)及C++实现
  6. LoadRunner中对图表的分析说明
  7. 软件工程个人项目——买书的最低价格
  8. 汇编 begin_【精品】小学作文500字汇编九篇
  9. 第九弹 - 脚本模式与参数视图
  10. 不越狱换壁纸_那些不舍得换的手机插画壁纸,你还差几张?
  11. 一个程序员的真实生活状态。没错,是我!
  12. Linux C语言:用零拷贝技术实现TCP代理(源代码+测试服务端客户端代码)
  13. MySQL学习8 - 数据的增删改
  14. Linux学习笔记(8)文件搜索与帮助(find)
  15. 【转】Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
  16. 【Axure10基础教程】第六章 动态面板
  17. Microsoft Office 2019 正式版 安装记录
  18. antd-vue表格实现单击或者双击
  19. uniapp对接极光推送
  20. iOS popViewController 失败

热门文章

  1. 丢失api-ms-win-crt-runtime-l1-1-0.dll
  2. JSP中一个页面怎么分清是链接过来还是提交过来的?
  3. Ajax跨域提交JSON和JSONP
  4. MyBatis Generator 生成器把其他数据库的同名表生成下来的问题
  5. java - 匿名类
  6. es6拼接字符串的方式。
  7. bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)
  8. UVa 10905 孩子们的游戏
  9. 使用Visio进行UML建模
  10. js 技巧杂引(转)