如何在Crypto++中返回字节值
How can I return a byte value in Crypto++?
我使用Crypto++用AES加密字符串。好的,它工作得很好,但现在我想创建一个函数,返回一个字节值,这是关键。
byte AESBest::gen_key()
{
AutoSeededRandomPool prng;
// warning: address of local variable ‘key’ returned [enabled by default]
byte key[AES::MAX_KEYLENGTH];
prng.GenerateBlock(key, sizeof(key));
//Error: invalid conversion from ‘byte {aka unsigned char}’ to ‘const byte* {aka const unsigned char*}’ [-fpermissive] }
return key;
}
嗯。我不能还钥匙,因为有些东西不清楚。当我设置byte key[AES::MAX_KEYLENGTH]
时,eclipse会向我显示似乎已返回的警告。但是当在结束返回键中时,会出现一个关于无效转换的奇怪错误。
为什么会发生这种情况?
我该如何解决这个问题?
编辑:好吧。现在我有了这2个函数。但是第一个操作很好,返回aes密钥的64个字符。(所有(
第二个-我不知道为什么-只返回4!为什么?(gen_part(
string AESBest::gen_all()
{
AutoSeededRandomPool prng;
byte key[AES::MAX_KEYLENGTH];
prng.GenerateBlock(key, sizeof(key));
string encoded;
encoded.clear();
StringSource(key, sizeof(key), true,
new HexEncoder(
new StringSink(encoded)
)
);
return encoded;
}
和:
string AESBest::gen_part()
{
AutoSeededRandomPool prng;
std::vector<byte> key(AES::MAX_KEYLENGTH);
prng.GenerateBlock(key.data(), key.size());
string encoded;
encoded.clear();
StringSource(key.data(), sizeof(key.size()), true,
new HexEncoder(
new StringSink(encoded)
)
);
return encoded;
}
第二个错误在哪里?
编辑:没关系!错误在sizeof
中,因此key.size((NO sizeof(key.size((
您不能在C++中返回原始数组(也不能按值将它们作为函数参数传递(。相反,使用std::vector<byte>
:
std::vector<byte> key(AES::MAX_KEYLENGTH);
prng.GenerateBlock(key.data(), key.size());
return key;
您必须相应地修改函数返回类型。使用key.data()
或&key[0]
获取指向底层数据数组的指针。
-
警告原因:您正在返回一个指向本地数组的指针。它是错误,因为本地变量将在退出后删除作用
-
错误原因:编译器希望您返回
byte
值,但您正在返回指针。
试试这个:
void AESBest::gen_key(byte *key, int size)
{
AutoSeededRandomPool prng;
prng.GenerateBlock(key, size);
}
并将其命名如下:
byte key[AES::MAX_KEYLENGTH];
gen_key(key, AES::MAX_KEYLENGTH);
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- C++/CX 如何从 IRandomAccessStream^ 转换为字节并返回.(UWP)
- 为什么 sys 套接字 recv 函数不填充数据但返回字节长度?
- C++ 从函数返回无符号字节
- 裸__declspec上的 memcpy 返回意外的字节
- InternetReadFile 填充缓冲区,但返回零字节读取
- 如果send()返回x字节,则recv()在一个呼叫中获取相同数量的字节
- ::运算符 delete(指针) 返回释放的字节大小
- 函数返回的 gsl::span 具有错误的字节
- 如何迫使新操作员返回的指针将是32字节对齐
- 返回字节数组或将数组传递到函数中
- crypto++将密钥保存到字节队列并返回到密钥
- mbtowc在osx上总是返回一个字节
- C 我应该如何返回字节数组
- 如何在C++中创建一个返回字节数组的函数?Arduino项目
- 如果在 main 中使用字符串,为什么 CRT 会返回 8 字节泄漏
- TCP Recv使用select()返回1字节读取
- 如何在Crypto++中返回字节值
- Microsoft psapi方法是否使用十进制或二进制表示法返回字节?
- 函数接受两个参数,一个字节和一个位字段,并返回字节中字段的值