程序重新启动时,文件没有使用相同的加密密钥解密

你好

我有一个简单的程序,可以根据从文本文件获得的输入来加密和解密文本。当我在一个周期内进行加密和解密时,会得到所需的结果,但是如果我加密,关闭应用程序然后重新运行应用程序,这次解密,则过程将失败。

解密代码如下:

string decoded, plainText;
string fileData((istreambuf_iterator<char>(fileDecrypt)), (istreambuf_iterator<char>()));

ECB_Mode<AES>::Decryption decryption;
decryption.SetKey((byte*)key.c_str(), sizeof(key));
StringSource(fileData, true, new HexDecoder(new StringSink(decoded)));
StringSource(decoded, true, new StreamTransformationFilter(decryption, new StringSink(plainText)));

当我在VS2010中运行调试器时,在最后一行出现错误

StringSource(decoded, true, new StreamTransformationFilter(decryption, new StringSink(plainText)));

当我将try-catch块包装在解密函数周围时,出现此错误

StreamTransformationFilter: invalid PKCS #7 block padding found

不知道为什么在同一版本中进行加密和解密会起作用,但是如果我尝试不首先在同一运行中先进行加密就进行解密,则会失败。

w
ECB_Mode<AES>::Decryption decryption;

ECB模式以完整的块大小运行,不需要填充。

您可以填充它,但是看起来却不是这样。需要注意的是,纯文本必须为16的倍数,这是AES的块大小。


当我将try-catch块包装在解密函数周围时,出现此错误

StreamTransformationFilter: invalid PKCS #7 block padding found

那是因为您要填充它:

StreamTransformationFilter(decryption, new StringSink(...)).

StreamTransformationFilter具有padding参数如您所知,这是BlockPaddingScheme::PKCS_PADDING


尝试:

ECB_Mode<AES>::Decryption decryption;
decryption.SetKey((byte*)key.data(), key.size());

std::string plainText;
StreamTransformationFilter filter(decryption, new StringSink(plainText),
                                  StreamTransformationFilter::NO_PADDING);

FileSource fs(filename.c_str(), true, new HexDecoder(new Redirector(filter)));
...

其他勘误表:

ECB_Mode<AES>::Decryption decryption;
decryption.SetKey((byte*)key.c_str(), sizeof(key));

sizeof(key)是错的。使用16、24或32。如果std::string尺寸正确,则可以使用key.size()

并命名您的对象。我已经看到GCC使用Crypto ++生成错误的代码:

ECB_Mode<AES>::Decryption decryption;
StringSource ss1(fileData, ...);
StringSource ss2(decoded, ...);

还有一个快速警告。

ECB模式通常是错误的。并不是说是这种情况,或者您错了。但是,你可能想看看EAX modeGCM modeCCM mode如果这超出了预期,我深表歉意。

更好的是,使用诸如椭圆曲线集成加密方案(ECIES)离散对数集成加密方案(DLIES)之类的方案这些方案是IND-CCA,这是一个非常强烈的安全性概念。

使用ECIES或DLIES时,您的问题将减少到共享公共密钥。但是现在对称密钥就存在这个问题,因此对于密钥分发来说这是一个横向举措,而对于加密则是一个胜利。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring SAML:解密加密密钥时出错,没有安装的提供程序支持此密钥

来自分类Dev

如何在下次重新启动时自动解密加密的文件系统?

来自分类Dev

如何在下次重新启动时自动解密加密的文件系统?

来自分类Dev

bitlocker是否在关闭/重新启动时加密数据?

来自分类Dev

有没有一种方法可以在重新启动时重新启动acpid?

来自分类Dev

重新启动运行监督程序的Docker会保留pid文件并在重新启动时导致错误

来自分类Dev

为什么Logstash每次重新启动时都会导入相同的文件?

来自分类Dev

将QCheckBox的状态保存在文件中,并在程序重新启动时加载状态

来自分类Dev

传输守护程序在重新启动时更改config文件夹

来自分类Dev

已安装CentOS,现在重新启动时没有Windows 8选项

来自分类Dev

在重新启动时,grub2没有出现

来自分类Dev

尝试在Ubuntu Server 18.04上安装Xfce,但重新启动时没有GUI

来自分类Dev

PC打开但没有信号监控(重新启动时工作)

来自分类Dev

程序重新启动时未出现Treenode

来自分类Dev

以编程方式使Java Web应用程序重新启动时的所有会话失效

来自分类Dev

在关机或重新启动时删除文件夹

来自分类Dev

重新启动时的“打开文件”对话框

来自分类Dev

当应用程序在后台和iPhone重新启动时如何使用ibeacon

来自分类Dev

如何使用 WKWebView / WKHTTPCookieStore 在应用程序重新启动时保留 cookie

来自分类Dev

AccessibilityService在启动时重新启动

来自分类Dev

OpenSSL:我使用存储在外部文件中的RSA密钥对文件进行加密和解密,但有时程序崩溃

来自分类Dev

为什么网络上的设备在重新启动时似乎总是具有相同的 IP,即使它们是 dhcp?

来自分类Dev

如果没有exe文件,如何使程序/应用程序小部件在启动时启动?

来自分类Dev

每次重新启动时,/ run / resolvconf / resolv.conf都会被删除,没有它,我将无法使用互联网(16.04)

来自分类Dev

重新启动时保留/ tmp

来自分类Dev

关闭应用后,在重新启动时启动相同的android最后活动

来自分类Dev

当应用程序服务器需要重新启动时,哪种文件类型会更改?

来自分类Dev

当应用程序服务器需要重新启动时,哪种文件类型会更改?

来自分类Dev

USB活动密钥是否可以被BIOS识别,但在重新启动时无法识别?

Related 相关文章

  1. 1

    Spring SAML:解密加密密钥时出错,没有安装的提供程序支持此密钥

  2. 2

    如何在下次重新启动时自动解密加密的文件系统?

  3. 3

    如何在下次重新启动时自动解密加密的文件系统?

  4. 4

    bitlocker是否在关闭/重新启动时加密数据?

  5. 5

    有没有一种方法可以在重新启动时重新启动acpid?

  6. 6

    重新启动运行监督程序的Docker会保留pid文件并在重新启动时导致错误

  7. 7

    为什么Logstash每次重新启动时都会导入相同的文件?

  8. 8

    将QCheckBox的状态保存在文件中,并在程序重新启动时加载状态

  9. 9

    传输守护程序在重新启动时更改config文件夹

  10. 10

    已安装CentOS,现在重新启动时没有Windows 8选项

  11. 11

    在重新启动时,grub2没有出现

  12. 12

    尝试在Ubuntu Server 18.04上安装Xfce,但重新启动时没有GUI

  13. 13

    PC打开但没有信号监控(重新启动时工作)

  14. 14

    程序重新启动时未出现Treenode

  15. 15

    以编程方式使Java Web应用程序重新启动时的所有会话失效

  16. 16

    在关机或重新启动时删除文件夹

  17. 17

    重新启动时的“打开文件”对话框

  18. 18

    当应用程序在后台和iPhone重新启动时如何使用ibeacon

  19. 19

    如何使用 WKWebView / WKHTTPCookieStore 在应用程序重新启动时保留 cookie

  20. 20

    AccessibilityService在启动时重新启动

  21. 21

    OpenSSL:我使用存储在外部文件中的RSA密钥对文件进行加密和解密,但有时程序崩溃

  22. 22

    为什么网络上的设备在重新启动时似乎总是具有相同的 IP,即使它们是 dhcp?

  23. 23

    如果没有exe文件,如何使程序/应用程序小部件在启动时启动?

  24. 24

    每次重新启动时,/ run / resolvconf / resolv.conf都会被删除,没有它,我将无法使用互联网(16.04)

  25. 25

    重新启动时保留/ tmp

  26. 26

    关闭应用后,在重新启动时启动相同的android最后活动

  27. 27

    当应用程序服务器需要重新启动时,哪种文件类型会更改?

  28. 28

    当应用程序服务器需要重新启动时,哪种文件类型会更改?

  29. 29

    USB活动密钥是否可以被BIOS识别,但在重新启动时无法识别?

热门标签

归档