使用openssl加密和解密小文件

2023-12-30

我想用 C/C++ 编写一个小程序,它读取一个小文本文件,并使用“内部”密钥对其进行加密。然后我还想编写另一个小程序,它可以使用内部相同的密钥解密加密的文件。

我查看了 openSSL 网站并用谷歌搜索,但发现不是简单的例子,有人尝试过做这件事吗?


理想情况下,您可以使用现有工具,例如ccrypt,但这里是:

#include <openssl/aes.h>

/* ... */


{
  int bytes_read, bytes_written;
  unsigned char indata[AES_BLOCK_SIZE];
  unsigned char outdata[AES_BLOCK_SIZE];

  /* ckey and ivec are the two 128-bits keys necesary to
     en- and recrypt your data.  Note that ckey can be
     192 or 256 bits as well */
  unsigned char ckey[] =  "thiskeyisverybad";
  unsigned char ivec[] = "dontusethisinput";

  /* data structure that contains the key itself */
  AES_KEY key;

  /* set the encryption key */
  AES_set_encrypt_key(ckey, 128, &key);

  /* set where on the 128 bit encrypted block to begin encryption*/
  int num = 0;

  while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);

    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
           AES_ENCRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofp);
    if (bytes_read < AES_BLOCK_SIZE)
  break;
  }
}

解密是通过调用完成的AES_cfb128_encrypt with AES_DECRYPT作为最后一个参数。请注意,此代码仅经过最基本的测试,并且您确实应该为 ckey 和 ivec 使用正确的 8 位随机数据​​。

EDIT: 它似乎AES_cfb128_encrypt接受任意长度的数据,因此您不需要按块进行加密AES_BLOCK_SIZE(16) 字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用openssl加密和解密小文件 的相关文章

  • 进程何时获得 SIGABRT(信号 6)?

    C 中进程获得 SIGABRT 的场景有哪些 该信号是否始终来自进程内部 或者该信号可以从一个进程发送到另一个进程吗 有没有办法识别哪个进程正在发送该信号 abort 向调用进程发送SIGABRT信号 就是这样abort 基本上有效 abo
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • C 语言中 =+(等于加)是什么意思?

    我碰到 与标准相反 今天在一些 C 代码中 我不太确定这里发生了什么 我在文档中也找不到它 In ancientC 版本 相当于 它的残余物与最早的恐龙骨头一起被发现 例如 B 引入了广义赋值运算符 使用x y to add y to x
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • axios 不发送参数的 POST 请求

    我正在尝试使用以下代码将一些数据从 Vue js 发布到基于 Symfony 的后端 updateQuestion function axios post staff question api this id id test name sr
  • IOError:[Errno 2]没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 我在尝试对文件夹中的许多文件运行迭代时遇到问题 这些文件存在 如果我从文件打印文件 我可以看到它们的名称 我对编程很陌生 你能帮我一下吗 亲切的问候 import os for path dirs files i
  • 如何设置 javapns(iOS 推送通知)?

    我查看了 javapns 的文档 wiki http code google com p javapns http code google com p javapns 不幸的是 本应显而易见的事情对我来说却并非如此 如何设置有效的推送通知服
  • ‘(’ 标记之前预期的构造函数、析构函数或类型转换

    编译polygone h and polygone cc给出错误 polygone cc 5 19 error expected constructor destructor or type conversion before token
  • 从存储过程获取输出参数而不调用execute()

    我想通过实体管理器从 Java 程序中调用 PL SQL 存储过程 StoredProcedureQuery storedProcedureQuery entityManager createStoredProcedureQuery som
  • 自执行函数语法和回调语法解释

    也许是一个有点愚蠢的问题 但我想了解为什么自执行函数及其回调的语法与所有其他 JS 语法如此不同 function 我只需要理解为什么用它来封装它是有效的 我没想到这是有效的 然后额外的 之后的回调 它就直接位于它之后 我也不期望它是有效的
  • 使用嵌入的 dll 作为资源启动程序时出现问题

    我已经搞定了About com 在 Delphi EXE 中嵌入 dll 的指南 http delphi about com od windowsshellapi l aa012103c htm只要我实际上不使用 DLL 作为外部函数 这似
  • Laravel 5.3 Passport 自定义补助金?

    我知道我不是唯一一个走到这一步的人 有谁知道如何properly在 Laravel 5 3 Passport 中实现自定义授权 Or 有一个很好的链接 教程来参考如何正确执行此操作吗 我知道有这个包 https github com mik
  • 无法让动态 OrderBy 在我的通用列表上工作

    我无法让动态 OrderBy 在我的通用列表上工作 var list CacheObjects CompetencyAssessments Select x gt new CompetencyAssessmentLineViewModel
  • PHP 和 C++ 之间的套接字连接

    我在 PHP 页面和 C 代码之间创建了 TCP 套接字连接 这是这个的 C 代码 服务器 cpp include
  • Stripe JS 在状态更改时发出重复请求和新请求

    我在前端使用 stripe JS 库 只是设置令牌 实际上并没有使用该库来做任何事情 奇怪的是 当我加载任何页面条纹时 都会发出一堆奇怪的请求 其中很多都是重复的 通常它看起来像这样 https m stripe com 4 https m
  • 异步/等待中的重入?

    我有一个按钮 上面有一个async调用异步方法的处理程序 它看起来是这样的 private async void Button1 OnClick object sender RoutedEventArgs e await IpChanged
  • react-native run-android 部署旧版本

    我正在构建一个反应本机 Android 应用程序 我使用 Windows 作为我的开发区域 要将我的应用程序推送到手机 我只需通过 USB 将手机连接到计算机 然后运行命令react native run android 这在我的一部 An
  • xlim 不适用于离散值 [ggplot2]

    我正在尝试使用以下命令在 ggplot put 中设置 xlim 和 ylim ylim c 0 1 5 xlim c 0 100 OR coord cartesian xlim c 0 100 ylim 0 1 5 似乎抛出这个错误 Er
  • Winston 没有将日志写入文件

    我在 Winston 中对错误和警告进行了两次传输 据称这些传输会写入文件 现有的控制台日志记录传输工作正常 我确实检查过pm2 logs并看到了日志 但文件的传输没有说什么 use strict const winston require
  • 评论系统设计

    这是我目前的评论系统设计 我正在为一个有很多区域 博客 教程 手册等的网站开发它 正如应该为每个 tblBlogComments tblTutorialComments 等等 我试图寻求一种适合所有方法的结构 这样 我可以将评论系统变成一个
  • 获取整个语言文件数组

    我是新手拉拉维尔 4 0 如何从中获取整个数组lang en texts php 有没有Lang getAll method 我的目标是在我的基本控制器中生成关键字 描述 将它们填充到主刀片模板中 DO M 的元标记和其他位置 如果我的方法
  • Node.js WebRTC 客户端

    我正在寻找一个webrtc questions tagged webrtc实施node js questions tagged node js传输数据NodeJS 客户端到另一个 webRTC 对等点 所以就我而言 nodejs 应用程序是
  • 更新 Azure VM 规模集上的 VHD

    我已使用 Azure VM 的 vhd 在 Azure 上创建了 VMSS 如何将 VMSS 的源 vhd 更改为新的 vhd Get the following error 我们可以用Update AzureRmVmss and Upda
  • 使用openssl加密和解密小文件

    我想用 C C 编写一个小程序 它读取一个小文本文件 并使用 内部 密钥对其进行加密 然后我还想编写另一个小程序 它可以使用内部相同的密钥解密加密的文件 我查看了 openSSL 网站并用谷歌搜索 但发现不是简单的例子 有人尝试过做这件事吗