- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 AES 加密和解密字节数组( vector<unsigned char>
) Crypto++ 库 .加密工作正常。
我的函数生成一个随机 IV 并将其放在加密数据的前面。解密当然是读取IV。我修改了来自 this 的代码答案,所以它适用于我的 vector 和点击率/无填充。
程序在 stfDecryptor.Put(...)
行崩溃.一开始以为是数据或IV读取不正确,但经过检查,事实并非如此。
我希望我在这里犯了一个非常明显的错误。
谢谢你们 :)
类调用:
//The code is not clean, i want to get it working first and then clean it up.
auto key = Helper::RandomBytes(16); //returns "byte Array" with random Bytes
auto data = Helper::UTF8String2ByteArray("HELLO WORLD!");
auto encrypted = AESCrypt::encrypt(key, data);
cout << Helper::ByteArray2HexString(key);
cout << "\r\n";
cout << Helper::ByteArray2HexString(data);
cout << "\r\n";
cout << Helper::ByteArray2HexString(encrypted);
cout << "\r\n";
auto decrypted = AESCrypt::decrypt(key, encrypted);
auto clear = Helper::ByteArray2UTF8String(decrypted);
vector<unsigned char> AESCrypt::encrypt(vector<unsigned char> key_, vector<unsigned char> data)
{
vector<unsigned char> iv_ = Helper::RandomBytes(16); //returns "byte Array" with random Bytes
byte key[AES::DEFAULT_KEYLENGTH], iv[AES::BLOCKSIZE];
for (size_t i = 0; i < AES::DEFAULT_KEYLENGTH; i++)
key[i] = key_[i];
for (size_t i = 0; i < iv_.size(); i++)
iv[i] = iv_[i];
AES::Encryption aesEncryption(key, AES::DEFAULT_KEYLENGTH);
CTR_Mode_ExternalCipher::Encryption ctrEncryption(aesEncryption, iv);
vector<unsigned char> encrypted;
StreamTransformationFilter stfEncryptor(
ctrEncryption,
new VectorSink(encrypted),
BlockPaddingSchemeDef::NO_PADDING);
stfEncryptor.Put((const byte*)data.data(), data.size());
stfEncryptor.MessageEnd();
vector<unsigned char> output(encrypted.size() + 16);
for (size_t i = 0; i < 16; i++)
output[i] = iv[i];
for (size_t i = 0; i < encrypted.size(); i++)
output[16 + i] = encrypted[i];
return output;
}
vector<unsigned char> AESCrypt::decrypt(vector<unsigned char> key_, vector<unsigned char> data_)
{
byte key[AES::DEFAULT_KEYLENGTH], iv[AES::BLOCKSIZE];
for (size_t i = 0; i < AES::DEFAULT_KEYLENGTH; i++)
key[i] = key_[i];
for (size_t i = 0; i < 16; i++)
iv[i] = data_[i];
vector<unsigned char> data(data_.size() - 16);
for (size_t i = 0; i < data.size(); i++)
{
data[i] = data_[16 + i];
}
AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CTR_Mode_ExternalCipher::Decryption ctrDecryption(aesDecryption, iv);
vector<unsigned char> decrypted;
StreamTransformationFilter stfDecryptor(
ctrDecryption,
new VectorSink(decrypted),
BlockPaddingSchemeDef::NO_PADDING);
stfDecryptor.Put((const byte*)data.data(), data.size()); //this is where it crashes
stfDecryptor.MessageEnd();
return decrypted;
}
CRYPTOPP_ASSERT(m_cipher->IsForwardTransformation());
最佳答案
This is the line where it stopps inside the CryptoPP Libary:
CRYPTOPP_ASSERT(m_cipher->IsForwardTransformation());
AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CTR_Mode_ExternalCipher::Decryption ctrDecryption(aesDecryption, iv);
AES::Encryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CTR_Mode_ExternalCipher::Decryption ctrDecryption(aesDecryption, iv);
$ cat test.cxx
#include "cryptlib.h"
#include "secblock.h"
#include "filters.h"
#include "modes.h"
#include "aes.h"
#include <iostream>
#include <string>
int main (int argc, char* argv[])
{
using namespace CryptoPP;
SecByteBlock key(16), iv(16);
std::memset(key, 0xff, key.size());
std::memset( iv, 0x88, iv.size());
std::string message, encrypted, decrypted;
message = "Now is the time for all good men "
"to come to the aide of their country.";
AES::Encryption aesEncryption(key, key.size());
CTR_Mode_ExternalCipher::Encryption ctrEncryption(aesEncryption, iv);
StreamTransformationFilter stfEncryptor(
ctrEncryption, new StringSink(encrypted));
stfEncryptor.Put((const byte*)&message[0], message.size());
stfEncryptor.MessageEnd();
AES::Encryption aesDecryption(key, key.size());
CTR_Mode_ExternalCipher::Decryption ctrDecryption(aesDecryption, iv);
StreamTransformationFilter stfDecryptor(
ctrDecryption, new StringSink(decrypted));
stfDecryptor.Put((const byte*)&encrypted[0], encrypted.size());
stfDecryptor.MessageEnd();
std::cout << "Message: " << message << std::endl;
std::cout << "Recovered: " << decrypted << std::endl;
return 0;
}
$ g++ -g2 -O1 test.cxx ./libcryptopp.a -o test.exe
$ ./test.exe
Message: Now is the time for all good men to come to the aide of their country.
Recovered: Now is the time for all good men to come to the aide of their country.
StreamTransformationFilter stfEncryptor(
ctrEncryption,
new VectorSink(encrypted),
BlockPaddingSchemeDef::NO_PADDING);
BlockPaddingSchemeDef::NO_PADDING
.它是计数器模式的默认值。
BlockPaddingScheme
的文档中有所说明。在手册中:
DEFAULT_PADDING means PKCS_PADDING if cipher.MandatoryBlockSize() > 1 && cipher.MinLastBlockSize() == 0, which holds for ECB or CBC mode. Otherwise, NO_PADDING for modes like OFB, CFB, CTR, CBC-CTS.
关于c++ - AES/CTR 解密使用 Crypto++ 意外停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59323973/
我有固定宽度的三列的页面布局。请参阅以下 HTML 和 CSS 片段 在显示器的某些分辨率下(尤其是在 firefox 中),当我缩放页面 (CTR-) 时,模板页面正在折叠。我找不到解决此问题的方法
我的问题是我无法从下面的 C 代码中获取 AES 256 CTR 输出以匹配下面 OpenSSL 命令的输出。 C 代码产生这个: 5f b7 18 d1 28 62 7f 50 35 ba e9 6
给定一个简单的 template struct X { T x, y; }; ,我想提供转换构造函数,以便用户可以编写: X a; X b = a; // uses implicit convers
我正在使用这个 example尝试使用 AES-256 加密数据。但是,当我使用密码 WeakPasswordForTesting 作为输入时,出现错误:crypto/aes: invalid key
有人在 windows 上尝试过 microk8s(我只需要在我一直使用 debian 的进程中使用它)我在将图像导入 microk8s 时出错 命令:microk8s ctr image impor
什么是“ctr”文件扩展名?最近我发现一个网站有一个名为“create.ctr”的文件,那是什么语言? 最佳答案 文件扩展名 .CTR 详细信息 http://filext.com/file-exte
所以我有这个代码,它基本上加密两个纯文本消息,然后尝试解密它们,然后打印。问题是第一条消息恢复得很好,但第二条消息是垃圾。我从 this tutorial 下载了这段代码,然后将其修改为使用字符串而不
有人能告诉我衡量访问主页并观看视频然后访问同一网站的另一个页面的用户与访问网站但不观看视频的用户的最佳方法是什么。我想提供一个衡量标准,显示观看视频然后转到同一网站其他地方的用户与未观看视频的用户。我
我有我的服务特定图像的 tar 。我将它导入到 containerd 中,以便 k3s 使用它来部署 POD。用于导入图像的 tar 的命令是- k3s ctr images import XXX.t
我想知道这段代码的作用。我所知道的是,循环(加 1)将在 ctr==20 时停止,但是 if(ctr%2) 这里意味着什么? sum=0; for(ctr=0; ctr< 20; ct
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试自己实现 CTR 模式(目前仅解密),仅使用来自 pycrypto 的 AES 内置函数。这意味着我不应该使用 mode=AES.MODE_CTR。不过,我知道使用 AES.MODE_CTR
我正在实现一个小型演示应用程序,它使用 AES CTR 和 OpenSSL 进行加密,是否可以使用不同的操作模式测试向量来测试算法,例如在我的应用程序中测试 ECB 向量并检查结果,或者它是否仅限于
我正在使用以下工作代码来解密文件: #include #include #include struct ctr_state { unsigned char ivec[16]; u
我试图了解使用 CTR 模式的加密是如何工作的,所以我创建了这些函数来测试它: import ( "crypto/cipher" "crypto/rand" ) // generate
当我想用快捷键 ctrl + / 注释或注释掉我的代码时,IntelliJ 将 // 放在第一列而不是电流。当前如何发表评论? 例子 System.out.println(set.co
我有一个使用 libgcrypt 的 CTR 模式实现用 AES-256 加密的文件。 我希望能够分部分解密文件(例如,在不解密整个文件的情况下解密 20 个块中的 5-10 个块)。 我知道通过使用
ctr 模式可以将分组密码用作流密码,但这种模式下的加密强度如何? 最佳答案 最终,这取决于你所说的强是什么意思。例如,从加密的角度来看,即利用攻击者在不访问 key 的情况下解密您的密文的能力,它应
在 Delphi 项目中,CTRL + Space 不起作用。在“使用”之前,当我按 CTRL + Space 时,会出现代码完成,但在“使用”之后不会出现。我使用德尔福 2009。我安装了 Fast
我写了一个小的 java 脚本代码,它用有效的 url 替换 anchor 标记的 url。我的听众的代码 document.addEventListener("click", function (e
我是一名优秀的程序员,十分优秀!