使用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加密和解密小文件 的相关文章

随机推荐

  • 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 网站并用谷歌搜索 但发现不是简单的例子 有人尝试过做这件事吗