C# 字节[]加密

2023-12-09

我有一个 Byte[] 字段,它是我需要加密的文件内容。没有什么特别或奇特的,只是足以确保下一个得到它的人不费吹灰之力就无法轻松解码它。我会使用 .Net Framework 4.0 附带的加密,但我绝对不需要使文件比实际更大。

我想过只是简单地反转数组或在末尾添加几个字节......?

如果我可以避免使数组变得更大,那就太好了。

有什么建议么?

Thanks!


添加1-16字节有伤害吗? AES 默认情况下将使用以下方法进行填充:

    private static void EncryptThenDecrypt(byte[] msg)
    {
        byte[] message = msg; // fill with your bytes

        if (message is null)
        {
            return;
        }

        byte[] encMessage; // the encrypted bytes
        byte[] decMessage; // the decrypted bytes - s/b same as message
        byte[] key;
        byte[] iv;

        using (SymmetricAlgorithm aes = Aes.Create())
        {
            if (aes is null)
            {
                iv = key = null;
                encMessage = Array.Empty<byte>();
            }
            else
            {
                aes.GenerateKey();
                aes.GenerateIV();
                key = aes.Key;
                iv = aes.IV;
                encMessage = EncryptBytes(aes, message);
            }
        }

        using (SymmetricAlgorithm aes = Aes.Create())
        {
            if (aes is null || key is null)
            {
                decMessage = Array.Empty<byte>();
            }
            else
            {
                aes.Key = key;
                aes.IV = iv;
                decMessage = DecryptBytes(aes, encMessage);
            }
        }

        Debug.Assert(message.SequenceEqual(decMessage), "Decrypted bytes do not match original bytes.");
    }

    private static byte[] EncryptBytes(SymmetricAlgorithm alg, byte[] message)
    {
        if (message is null)
        {
#pragma warning disable S1168 // Empty arrays and collections should be returned instead of null
            return null;
#pragma warning restore S1168 // Empty arrays and collections should be returned instead of null
        }

        if (message.Length == 0)
        {
            return message;
        }

        if (alg is null)
        {
            throw new ArgumentNullException(nameof(alg));
        }

        using (MemoryStream stream = new MemoryStream())
        using (ICryptoTransform encryptor = alg.CreateEncryptor())
        using (CryptoStream encrypt = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
        {
            encrypt.Write(message, 0, message.Length);
            encrypt.FlushFinalBlock();
            return stream.ToArray();
        }
    }

    private static byte[] DecryptBytes(SymmetricAlgorithm alg, byte[] message)
    {
        if (message is null)
        {
#pragma warning disable S1168 // Empty arrays and collections should be returned instead of null
            return null;
#pragma warning restore S1168 // Empty arrays and collections should be returned instead of null
        }

        if (message.Length == 0)
        {
            return message;
        }

        if (alg is null)
        {
            throw new ArgumentNullException(nameof(alg));
        }

        using (MemoryStream stream = new MemoryStream())
        using (ICryptoTransform decryptor = alg.CreateDecryptor())
        using (CryptoStream encrypt = new CryptoStream(stream, decryptor, CryptoStreamMode.Write))
        {
            encrypt.Write(message, 0, message.Length);
            encrypt.FlushFinalBlock();
            return stream.ToArray();
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 字节[]加密 的相关文章

  • Automapper、Mapper 未初始化。使用正确的配置调用初始化

    当我尝试将数据提交到数据库时 出现以下错误 Success false Error true ErrorType 2 Message System InvalidOperationException Mapper 未初始化 使用适当的配置调
  • asp:repeater 折叠表行 - 已更新

    我想知道是否有人对我的问题有创造性的解决方案 我有一个从我的数据库填充的转发器 如下所示
  • 集群():是否可以仅检查文件是否已锁定,而不实际获取锁定(如果没有)?

    我的用例如下 我有一个程序 它强制在任何给定时间只能运行它的一个实例 因此在启动时它总是尝试在标准位置获取锁定文件 并在该文件终止时终止已经被锁定 这一切都工作正常 但现在我想用一个新的命令行选项来增强程序 当指定该选项时 将导致程序只打印
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • 使用 C 的另一个结构内的灵活长度结构数组

    你好 我正在尝试使用 C 来实现一个简单的结构 2 个盒子 每个盒子包含不同数量的颗粒 main 中传递的粒子的确切数量 我写了以下代码 typedef struct Particle float x float y float vx fl
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 结构大小与 typedef 版本不同?

    我的代码中有以下结构声明和 typedef struct blockHeaderStruct bool allocated unsigned int length typedef struct blockHeaderStruct block
  • 用 std::generate_n 填充 std::map

    我想填写一个std map using std generate n但无法让它发挥作用 我尝试过的是这样的事情 unsigned number of pairs 5 std map
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗

随机推荐

  • 伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

    我有一个基本存储库 所有实体存储库都继承自该存储库 在我的睾丸中 我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库 但是在我的 FakeDbContext 中实现一些方法时 我无法实现IDbContex
  • Oracle针对不同条件的order by

    我有一个查询 我想根据条件进行两种订单 例如 如果一个字段为 NULL 我需要下一个订单 如果不是 我必须下一个订单 我怎样才能做到呢 select from table 1 t order by if t field1 is null t
  • 单子、组成和计算顺序

    所有 monad 文章经常指出 monad 允许您按顺序对效果进行排序 但是简单的构图又如何呢 不是 f x x 1 g x x 2 result f g x 需要g x之前要计算f 单子是否做同样的事情 但处理效果 免责声明 单子有很多东
  • 修改表中的列

    我有下表test iD Name ParentId GroupID 1 1 Null 2 1 Null 3 1 Null 4 7 Null 5 7 Null 6 7 Null 7 9 Null 我怎样才能修改它来获取列GroupID像这样
  • JQUERY ajax 将值从 MVC 视图传递到控制器

    我想要的是将 txt Comments 的值从视图 使用 jquery ajax 传递到控制器 问题是 ajax jquery 不接受脚本标签作为字符串 意思是 当我在 txtComments 中输入任何 script html 标签时 a
  • LINQ Any 与 FirstOrDefault 的性能 != null

    我贡献的开源项目 OSP 代码中有多个地方必须确定集合中的元素是否满足特定条件 我见过LINQ表达式的使用Any lambda expression 在某些情况下和FirstOrDefault lambda expression null在
  • Ionic 隐藏导航栏而不是按钮

    我正在尝试寻找一种可能的方法来隐藏离子ion nav bar不隐藏ion nav barbuttons 我努力了 hide nav bar true 但它也隐藏了按钮 我已经搜索过并且也参考过this 但没有解决我的问题 问候 你只需要指定
  • 用于编辑源代码的 Docker 安装卷

    我的 Windows 系统上有 docker 设置 该应用程序的源代码位于C Application source地点 我希望这些信息在 docker 容器中可用 以便在开发过程中轻松更改代码 而无需重建映像 这就是我尝试过的 docker
  • 玩笑测试为 eventemitter 对象发出事件(express)

    试图从中获得灵感玩笑测试为 eventemitter 对象发出事件 http 没有解决我的痛苦express 假设有以下nodejs代码 server js const express require express const app e
  • 迁移到 Firebase Cloud Messaging:导入现有 Google 项目会对项目产生什么影响?

    In 设置 FCM它说 如果没有 请在 Firebase 控制台中创建一个 Firebase 项目 已经有一个了 如果您已经有一个现有的 Google 项目 与您的移动应用程序关联 单击导入 Google 项目 否则 单击 创建新项目 我有
  • 如何在 Spring Security 登录表单中进行额外验证?

    我想知道如何在 Spring Security 处理登录表单之前对其进行额外的验证 我正在考虑一些 LoginController LoginForm bean 但我不知道如何将它们组合在一起 如何配置它来工作 下面是我的 愿景 我搜索了一
  • 错误:rails 中的“不兼容的库版本”sqlite3-1.3.11

    我在 Ubuntu 系统 16 04 上工作 我的问题是每当我设置任何 Rails 项目并尝试运行rails s然后我收到 sqlite3 的 库版本不兼容 错误 如下所示 home jiggs rvm gems ruby 2 3 1 al
  • 字节中的位数是否等于 char 类型中的位数?

    C 标准有强制要求吗 是否存在一个字节中的位数不等于类型中的位数的平台char Yes Both are equal to CHAR BIT C标准定义CHAR BIT as 不是位字段 字节 的最小对象的位数 c99 明确表示 一个字节包
  • 如何获取Windows中当前交互式用户会话的数量?

    我正在编写一个 Windows 服务 它需要知道当前是否有任何用户登录在计算机上 到目前为止我已经尝试过Win32 LogonSession WMI 以及LsaEnumerateLogonSessions LsaGetLogonSessio
  • 在Python中通过strptime解析不带前导零的小时

    假设您有以下格式的时间 a 800 0 830 0 900 0 930 0 1000 0 1030 0 问题是缺少小时的前导零 例如00 30表示为30 08 00表示为800 and 00 00表示为2400 是否可以将此数据解析为tim
  • 如何计算并仅打印重复项?

    我知道如何遍历整个数组 但我只需要重复出现的次数 我处于初学者水平 所以只是循环和数组的基本使用 int array 12 23 22 0 43 545 4 55 43 12 0 999 87 for int i 0 i lt array
  • 了解LDR和STR吗?

    我正在使用 ARMSim 我猜它是一个 ARM 模拟器 并且我有这个演示程序 它基本上读取一个文本文件并打印文本文件中的整数 仅第一行 Start Open file for input LDR R0 InputFileName MOV R
  • 显示“android-feedback.com”库的对话框

    我正在按照这里给出的教程进行操作http www android feedback com library用于发送反馈 但我无法显示对话框onOptionsItemSelected Override public boolean onCre
  • 获取 Google Apps 脚本来授权 Fusion Table API

    我正在构建一个数据库 希望将其托管在 Fusion Table 中 并且正在开发一些用于与 Fusion API 交互的测试函数 我正在使用 Google Apps 脚本 并且严重依赖此代码的其他来源 我花了一天的大部分时间研究这个问题 但
  • C# 字节[]加密

    我有一个 Byte 字段 它是我需要加密的文件内容 没有什么特别或奇特的 只是足以确保下一个得到它的人不费吹灰之力就无法轻松解码它 我会使用 Net Framework 4 0 附带的加密 但我绝对不需要使文件比实际更大 我想过只是简单地反