在 Crypto++ 中使用原始 RSA 算法加密和解密消息?

2024-01-28

我在用Crypto++ http://git@github.com:weidai11/cryptopp.git密码学相关作品的图书馆。任务的子部分是加密和解密文本。该消息的长度最多为 256 个字符,包含字母数字、空格、点和特殊字符。

这段代码适用于文本长度小于或等于8的情况。但是之后它无法解密加密的文本。

// g++ -std=c++1y crypto.cpp -I /home/shravan40/cryptopp/build -lcryptopp

#include <iostream>

#include <cryptopp/rsa.h>
#include <cryptopp/integer.h>
#include <cryptopp/osrng.h>

int main(){
    // Keys
    CryptoPP::Integer n("0xbeaadb3d839f3b5f"), e("0x11"), d("0x21a5ae37b9959db9");

    CryptoPP::RSA::PrivateKey privKey;
    privKey.Initialize(n, e, d);

    CryptoPP::RSA::PublicKey pubKey;
    pubKey.Initialize(n, e);

    // Encryption
    std::string message = "Shravan Kumar";
    CryptoPP::Integer m((const byte *)message.data(), message.size());
    std::cout << "m: " << m << std::endl;
    // m: 126879297332596.

    CryptoPP::Integer c = pubKey.ApplyFunction(m);
    std::cout << "c: " << std::hex << c << std::endl;
    // c: 3f47c32e8e17e291h

    // Decryption
    CryptoPP::AutoSeededRandomPool prng;
    CryptoPP::Integer r = privKey.CalculateInverse(prng, c);
    std::cout << "r: " << std::hex << r << std::endl;

    // r: 736563726574h
    std::string recovered;
    recovered.resize(r.MinEncodedSize());

    r.Encode((byte *)recovered.data(), recovered.size());
    std::cout << "recovered: " << recovered << std::endl;

    // recovered: Expected : (Shravan Kumar), Received -> y5��dqm0
    return 0;
}

理查德·克里顿是正确的在他的评论中 https://stackoverflow.com/questions/42046991/encrypte-decrypte-a-text-using-raw-rsa-algorithim-cryptopp#comment71267166_42046991通常使用混合加密(非对称密码(例如 RSA)和对称密码(例如 AES)。

对于这类不安全的例子尽管通常只需要将明文分割成与模数相同大小的部分n。因此,在您的情况下,只需将每 8 个字节/字符放在一起,并将其用作(大端)数字。由于输入似乎是 ASCII,这 8 个字节的最高位将始终设置为零,因此加密/解密不会有任何问题。 RSA 的输入当然必须始终小于n.

当然,您可能必须想出一种聪明的方法来处理字符串的最后部分。


Notes:

  • 如果还没有被告知:没有填充的原始 RSA 也不安全。因此,如果在现场实施此示例,则不仅仅是密钥大小会成为问题。
  • 我不知道你在解密方面做了什么。我想你应该再看看你的教科书。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Crypto++ 中使用原始 RSA 算法加密和解密消息? 的相关文章

随机推荐

  • Seam @Transactional 注释不起作用?

    我在接缝组件上使用 Transactional 注释 类似于 Name myComponent AutoCreate public class MyComponent public void something doWork Transac
  • 如何从 SQL 表中检索分层数据

    我有 2 个表 T Employees 和 T Projects 每个项目都分配了不同数量的员工 我需要做的是获取每个员工的层次结构 并将其分配给特定的项目 请看下图和预期结果 如何在 Microsoft SQL Server 2008R2
  • 如何使用 Puppeteer 选择具有同一类的所有子 div?

    我是 Puppeteer 的新手 我正在尝试从使用同一类的两个 div 中获取 textContent div class post item div class post item info span class post item st
  • 将 javascript 数组传递到另一个页面

    我想知道是否有一种方法可以将数组及其内容传递到另一个页面以供使用 我正在使用一个数组来存储用于在谷歌地图上绘制折线的坐标 该数组在一页上工作正常 但是当我尝试调用该数组在另一张地图上绘制折线点时 似乎该数组已被清空并且没有绘制折线点 我尝试
  • 何时使用简单的 extern "C" ? [复制]

    这个问题在这里已经有答案了 也许我不理解 C 和 C 之间的区别 但是什么时候以及为什么我们需要使用 extern C 显然这是一个 链接约定 我简要地阅读了它 并注意到 MSVS 中包含的所有 h 头文件都用它包围了它们的代码 到底什么类
  • ai_socktype 不支持 Servname

    我正在使用 Vagrant 运行 Centos 虚拟机 机器似乎运行正常 但是当我尝试同步 Perforce 时 我可以看到以下错误 vagrant vagrant c5 x86 64 perforce p4 sync f Perforce
  • 如何在不重新启动服务器的情况下将 EAR 文件重新部署到 Web-Logic?

    我的 EAR 文件 包括 WAR 文件和 EJB jar 文件 已成功部署在 Web Logic 10 3 6 上 现在 我已经更新了 EAR 文件 并按照以下步骤再次重新部署 删除服务器上的旧文件并安装新的 EAR 文件 而无需重新启动服
  • 从操作系统获取事件

    我在 Windows 上工作 但在 Mac 上却卡住了 我有 Canon SDK 并构建了一个JNA包装在它上面 它在 Windows 上运行良好 但在 Mac 上需要一些帮助 在sdk中 有一个函数可以注册回调函数 基本上 当相机中发生事
  • 递归 Haskell 函数似乎不会终止

    为了提高我的 Haskell 技能 我正在尝试解决2018 年代码的到来 https adventofcode com 正如预期的那样 我已经陷入了第一天 特别是第二部分 第二部分 您注意到设备重复相同的频率更改列表 以及结束 要校准设备
  • XCTestCase 未在 setUp 类方法中启动应用程序

    我正在使用 XCode 8 和 XCTestCase 我创建了一个类 setUp 函数 在所有测试之前运行一次 另一个 setUp 在每个测试用例之前运行 我希望应用程序在所有测试用例之前启动一次 如果我在类 setUp 中使用 launc
  • 使用 Naudio 将 MP3 文件转换为 WAV 文件时遇到问题

    瑙迪奥图书馆 http naudio codeplex com http naudio codeplex com 我正在尝试将 MP3 文件转换为 WAV 文件 但遇到了一个小错误 我知道出了什么问题 但我真的不知道如何解决它 这是我正在运
  • _GLIBCXX_USE_CXX11_ABI、GCC 4.8 和 ABI 兼容性

    我们收到了一些为 Linux 编译的库 a 可能是用 GCC 6 x 编译的 我们使用的是 GCC 4 8 并且收到以下类型的错误 undefined reference to std cxx11 basic string当尝试链接时 通常
  • PHP 邮件停止工作

    前几天使用的时候mail 我让它工作了 但现在不行了 而且我不知道问题是什么 to email protected cdn cgi l email protection subject the subject message hello h
  • 如何获取 JSON 对象数组中所有子节点的 JSONPath?

    如何获取对象所有子节点的 JSONPath E g var data key1 children key2 value key3 value key4 key2 value key3 value key4 key5 value key1 c
  • 使用 numpy 处理 exp 溢出

    使用 numpy 我有一个函数的定义 def powellBadlyScaled X f1 10 4 X 0 X 1 1 f2 numpy exp numpy float X 0 numpy exp numpy float X 1 1 00
  • 检查文件是否存在(由命令行参数给出)

    我需要一个使用unix环境的C程序 我已经购买了 Unix环境下的高级编程 一书 到目前为止它已经帮了我很大的忙 然而 我的一些问题没有得到解答 我正在寻求一些帮助 我正在尝试编写一个程序 可以验证是否存在复制程序时输入的第一个和第二个参数
  • readstream 管道未关闭

    我正在使用 sax js 读取大型 xml 文件 解析器完成后我无法让程序退出 这是脚本的形状 删除了解析器逻辑 var fs require fs var sax require sax var feedFile foo xml var
  • Google Cloud Endpoints 链接 iOS 客户端问题

    这个问题的产生是因为我不完全理解iOS中的静态库 而且谷歌的文档似乎有点稀疏 我正在尝试将 Google Cloud Endpoints 用于我的移动后端 我为我的客户端库生成 m 和 h 文件 然后我创建了一个新项目 OwnItApi 将
  • 将 fscanf 转换为 C 中的二维数组

    我想将 txt 中的元素扫描到数组中 txt 没有我将有多少行或列 它只包含一个坐标和数组的元素 它看起来像这样 2 3 2 1 3 0 我怎样才能将这些数字放入一个数组中 以便array 0 0 将2 and array 1 0 将3 e
  • 在 Crypto++ 中使用原始 RSA 算法加密和解密消息?

    我在用Crypto http git github com weidai11 cryptopp git密码学相关作品的图书馆 任务的子部分是加密和解密文本 该消息的长度最多为 256 个字符 包含字母数字 空格 点和特殊字符 这段代码适用于