Crypto++ 在两个不同的 C++ 程序中加密和解密

2023-12-03

我正在编写一个使用 crypto++ 库进行加密和解密的代码。我找到了一个用于加密和解密的代码,如下所示。该代码作为一个程序可以正常工作。但是当我分成两个 C++ 程序时(一个用于加密,另一个用于解密) )解密程序给我错误

terminate called after throwing an instance of 'CryptoPP::InvalidCiphertext' what(): StreamTransformationFilter: ciphertext length is not a multiple of block size

加密后得到的密文是

���z=(f�����P%���2��W3�p�H�����^��@C��#������bp���nx��

我将其转换为解密代码。我究竟做错了什么?

我的第一个加密程序是

#include <iostream>
#include <iomanip>
#include <cryptopp/hex.h>
#include <cryptopp/sha.h>
#include <cryptopp/base64.h>
#include <iostream>
#include <string>
#include "crypto++/modes.h"
#include "crypto++/aes.h"
#include "crypto++/filters.h"

int main(int argc, char* argv[]) {

    //
    // Key and IV setup
    //AES encryption uses a secret key of a variable length (128-bit, 196-bit or 256-
    //bit). This key is secretly exchanged between two parties before communication
    //begins. DEFAULT_KEYLENGTH= 16 bytes
    byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
    memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
    memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );

    //
    // String and Sink setup
    //
    std::string plaintext = "Now is the time for all good men to come to the aide...";
    std::string ciphertext;
    std::string decryptedtext;

    //
    // Dump Plain Text
    //
    std::cout << "Plain Text (" << plaintext.size() << " bytes)" << std::endl;
    std::cout << plaintext;
    std::cout << std::endl << std::endl;

    //
    // Create Cipher Text
    //
    CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption( aesEncryption, iv );

    CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext ) );
    stfEncryptor.Put( reinterpret_cast<const unsigned char*>( plaintext.c_str() ), plaintext.length() + 1 );
    stfEncryptor.MessageEnd();

    //
    // Dump Cipher Text
    //
    std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl;

    for( int i = 0; i < ciphertext.size(); i++ ) {

        std::cout << "0x" << std::hex << (0xFF & static_cast<byte>(ciphertext[i])) << " ";
    }

    std::cout << std::endl << std::endl;

    /////////////////////////////////////////////////////////////////////////

    return 0;
}

我使用 URL 例如发送密文。https://xxx.xxx.xx.xx/_SERVER_TEST.fcgi?��z=(f�����P%���2��W3�p.H�����^��@C��#������bp���nx ��

另一方面,我正在尝试解密我的密文。但 URL 不理解密码。

我的第二个程序解密是

#include <iostream>
#include <iomanip>
#include <cryptopp/hex.h>
#include <cryptopp/sha.h>
#include <cryptopp/base64.h>
#include <iostream>
#include <string>
#include "crypto++/modes.h"
#include "crypto++/aes.h"
#include "crypto++/filters.h"

int main(int argc, char* argv[]) {

    //
    // Key and IV setup
    //AES encryption uses a secret key of a variable length (128-bit, 196-bit or 256-
    //bit). This key is secretly exchanged between two parties before communication
    //begins. DEFAULT_KEYLENGTH= 16 bytes
    byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
    memset( key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
    memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );

    std::string ciphertext;
    std::string decryptedtext;

    //
    // Decrypt
    //
    CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

    CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink( decryptedtext ) );
    stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
    stfDecryptor.MessageEnd();

    //
    // Dump Decrypted Text
    //
    std::cout << "Decrypted Text: " << std::endl;
    std::cout << decryptedtext;
    std::cout << std::endl << std::endl;

    /////////////////////////////////////////////////////////////////////////

    return 0;
}

None

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

Crypto++ 在两个不同的 C++ 程序中加密和解密 的相关文章

  • 将 SQL Server varBinary 数据转换为字符串 C#

    我需要帮助弄清楚如何转换来自SQL服务器表列设置为varBinary 最大 转换为字符串以便将其显示在标签中 这是在C 我正在使用数据读取器 我可以使用以下方式提取数据 var BinaryString reader 1 我知道该列包含之前
  • 动态选择和更新 LINQ 结果集中的列值

    我有一个场景 其中存在 LINQ 结果集 我使用了以下查询 var stockDetails from d in db BloodBanks where d bbUserName Session username ToString sele
  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • C# 并行与并行线程代码性能

    我一直在测试 System Threading Parallel 与线程的性能 我很惊讶地发现并行比线程花费更长的时间来完成任务 我确信这是由于我对并行的了解有限 我刚刚开始阅读 我想我会分享一些片段 如果有人可以向我指出并行代码比线程代码
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 在目标 VS 安装时,VSIX 扩展内部使用的 WPF-Log4Net 未输出日志

    当 Log4net 在 VSIX 扩展中使用并安装在另一个目标 VS 上时 它不会记录日志 我有一个 WPF 解决方案 我下载了 log4net dll 添加了 log4net config 并将 复制到输出目录 值设置为 始终复制 log
  • 为什么将 char 传递给函数会改变它在 c 中的值?

    我目前正在关注本作业簿 http www cs bham ac uk exr lectures opsys 10 11 lectures os dev pdf关于构建操作系统 我的目的是写一个64位内核 我已经在文本模式下加载 内核 代码并
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • EF Core 一对多关系列表返回 null

    我正在尝试学习如何在 EF Core 中正确利用 DbContext 我有一个团队课程 public class Team public int ID get set public string Name get set public bo
  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • 将授权标头添加到 Web 参考

    我正在尝试向客户端的网络服务发出请求 我不知道客户端的底层平台 我使用 添加 Web 引用 在 Visual Studio 2010 中使用了客户端的 WSDL 并生成了我的代理类 称为 ContactService 我现在需要将如下所示的
  • 为什么 httpRuntime targetFramework="4.5" 禁止抓取 .ASPXAUTH cookie?

    当我的 web config 具有以下 httpRuntime 时 我的控制器无法获取 cookie ASPXAUTH 它似乎能够获取任何其他 cookie 无论带或不带句点前缀 如果我删除下面的行 它就可以正常工作
  • C 中的链表数组:初始化和插入?

    我需要创建一个链表数组 如图所示 这就是我到目前为止所做的 typedef struct Node int data struct Node next Node int main void Node link 5 for int q 0 q
  • C++:LPWSTR 在 cout 中打印为地址

    我有一个类型变量LPTSTR 我打印到std cout with lt lt 在 ANSI 系统中 不知道它是在哪里确定的 它工作得很好 它打印了字符串 现在 在 Unicode 系统中 我得到的是十六进制地址而不是字符串 那么 为什么LP
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • 如何创建和使用类箭头运算符? [复制]

    这个问题在这里已经有答案了 因此 在到处研究之后 我似乎找不到如何创建类箭头运算符 即 class Someclass operator gt 我只需要知道如何使用它并正确使用它 它的输入是什么 它返回什么 我如何正确地声明 原型化它 运算
  • char[length]初始化并处理

    我定义了一个字符数组 char d 6 如果我在以下方面有误 请纠正我 此时没有为变量分配内存d 现在我要初始化它 d aaaaa 这种初始化之后 就不需要释放内存了 它将自动完成 我怎么知道是否char 被初始化了吗 我正在寻找类似的模式
  • C#:如何处理乱序 TCP 数据包?

    请有人解释一下如何处理乱序数据包 我使用原始套接字来捕获数据包 并在数据包到来时解析它们 但其中一些数据包的顺序错误 例如 ID 标志 16390 PSH ACK 16535 PSH ACK 16638 确认 16640 PSH ACK 1

随机推荐

  • 贝宝集成问题

    我无法弄清楚我的代码做错了什么 我收到错误 我们检测到该购物车存在问题 如果问题仍然存在 请联系商家 这是我正在提交的表格
  • python内部类的用途是什么?

    Python 的内部 嵌套类让我很困惑 有什么事情是没有他们就无法完成的吗 如果有的话 那是什么东西 引自http www geekinterview com question details 64739 内部类的优点 类的逻辑分组 如果一
  • 用鼠标移动绘制的线

    我试图通过用鼠标抓住一条绘制的线来移动它 这条线已经画好了Graphics DrawLine Pen P Point A Point B 创建线条并将其绘制在表单上绝对没有问题 我试过了 将行添加到GraphicsPath 这甚至没有划清界
  • Bootstrap 导航栏下拉菜单项右侧

    如下图所示 当我单击响铃图标时 图标的右下角会出现一个下拉菜单 我希望这个下拉菜单出现在左下角而不是右下角 我应该怎么办
  • CouchDB 使用什么加密机制?

    有谁知道 CouchDB 使用什么类型的加密来安全地存储数据 如何更改 控制 CouchDB 上的这种数据安全加密机制 CouchDB 不会通过加密方式加密静态数据 密码除外 PBKDF2单向哈希 它确实允许通过使用对传输中的数据进行加密H
  • 为多台服务器设置 DiscordBot 的频道 ID

    有人可以帮我设置命令来设置特定服务器的频道吗 这样就不会互相干扰 其实我有这个 var testChannel bot channels find channel gt channel id hereMyChannelID 我想设置所有者可
  • 本地化 Windows Phone 8“应用程序标题”和“平铺标题”字符串

    我有一个简单的 Windows Phone 8 WP8 应用程序 我通过修改 AppResources resx 创建西班牙语版本来对其进行本地化 问题是 WMAppManifest xml 上的 应用程序标题 和 平铺标题 仍采用默认语言
  • Jetty 8 网络套接字

    我已经下载了最新的 Jetty 8 Hightide 但无法使 WebSockets 工作 我解压缩发行版 将 war 文件放入 webapps 文件夹中并启动 java lang NoClassDefFoundError org ecli
  • 从文本文件中解析唯一单词

    我正在开发一个项目 从大量文本文件中解析出唯一的单词 我已经完成了文件处理 但我正在尝试改进解析过程 每个文件都有一个特定的文本段 以我在实时系统上使用正则表达式捕获的某些短语结尾 解析器应该遍历每一行 并根据 3 个标准检查每个单词 长度
  • 如何在 Android 锁屏界面提示用户输入 PIN 码?

    Android 屏幕锁定 解锁编程 and 如何以编程方式锁定 解锁手机 Android 我已经搜索了许多问题的答案 但我没有得到适合我的用法的确切答案 我想在锁定屏幕默认系统锁定屏幕中获取输入凭据或输入密码页面 当我们说 Ok Googl
  • 使背景图像响应 - fullpage.js

    我在用fullpage js用于视差滚动 可以制作背景图吗responsive在大自然中 当我re size my window https github com alvarotrigo fullPage js 下面是我正在使用的示例 ht
  • 为什么 SQL Server 2008 在使用 GROUP BY 时会进行排序并且未指定顺序?

    我遇到了一个非常奇怪的问题 我还没有找到解释 使用 SQL Server 2008 并使用 GROUP BY 它可以对我的列进行排序 而无需指定任何 ORDER BY 这是演示这种情况的脚本 CREATE TABLE Values Fiel
  • 使用 INNER JOIN 从 SQL 转换 UPDATE 以在 MySQL 中使用

    我想在 MySQL 中为我们转换这个 UPDATE product SET price 12 95 FROM product INNER JOIN product to category ON product product id prod
  • 将长日期字符串转换为 R 中的日期

    我有一个日期变量 其格式为 25 APR 2013 03 05 03 000000000 PM 我已将其转换为字符并尝试将其格式化 我确实使用了 as Date 的帮助文档 但它对我没有帮助 我正在尝试找到一种解决方案 将其转换为标准 Y
  • 将列中的类别提取到具有新类别的重复行中

    我有一个看起来像这样的表 Group Name Comment Tag 1 Tag 2 Tag 3 gr1 Joe We are SYSTEM SUGGESTION PAINPOINT gr1 Joe I want PROCESS ATTI
  • Facebook sharer.php 端点不再被弃用吗?

    Facebook sharer php 端点不再被弃用吗 我做了很多挖掘和研究 我们是否仍然可以使用 Facebook 共享对话框 URL 进行共享 http www facebook com sharer sharer php u URL
  • Windows 性能计数器从 PerfMon 中消失

    我对此感到完全困惑 TM 在 Win7SP1 64 位机器上 PerfMon似乎完全否认已安装的自定义性能计数器的知识 我正在使用一个现有的代码库 该代码库在生产机器上完美地安装了计数器 但是当我在我的机器上运行它时 当我使用我添加的计数器
  • Function/OnTap 中的 AlertDialog 设置状态

    新来扑腾 我知道如何设置警报对话框的状态 但需要点击才能实现 gt createPlayer 等功能 它不想重建警报对话框 我想知道当您需要点击警报对话框时如何设置它们的状态 File image GestureDetector onTap
  • MySQL 结合 COUNT、MAX 和 SUM

    在 MySQL 中 我想要一个额外的列来显示特定列的值的总和 但是 我想要求和的数字来自子查询 并且不存储在单独的表中 如下所示 SELECT a ID MAX a COUNT ID AS MAX COUNT FROM SELECT ID
  • Crypto++ 在两个不同的 C++ 程序中加密和解密

    我正在编写一个使用 crypto 库进行加密和解密的代码 我找到了一个用于加密和解密的代码 如下所示 该代码作为一个程序可以正常工作 但是当我分成两个 C 程序时 一个用于加密 另一个用于解密 解密程序给我错误 terminate call