我正在使用一个名为botan的库来加密.但这里的情况与库无关,似乎是c ++或者转换中的一个问题.使用该库创建一个16字节长的向量,如下所示.
SecureVector<byte> salt = rng.random_vec(16);
Run Code Online (Sandbox Code Playgroud)
然后它被转换为字符串,
std::string salt_string ((const char*)salt.begin() , salt.size());
Run Code Online (Sandbox Code Playgroud)
使用Qt我只能读取srting,
ui->textEdit->append("Salt is : "+ QString::fromStdString(salt_string));
Run Code Online (Sandbox Code Playgroud)
现在我需要将其写入文件并在以后重新生成向量.它被写入文件,
ofstream outfile ("salt.txt" , std::ios::binary);
outfile.write((const char*)salt.begin(), salt.size());
Run Code Online (Sandbox Code Playgroud)
到目前为止,代码看起来很有效,并且在读取和重新生成向量时会出现问题.
这是我如何将数据读取到char*数组,
ifstream infile ("salt.txt" , std::ios::binary );
char* salt = new char[16];
infile.read(salt , 16 );
Run Code Online (Sandbox Code Playgroud)
现在我需要重新创建SecureVector<byte>as2,我尝试使用reinterpret_cast如下所示,
SecureVector<byte> salt2 = reinterpret_cast<byte> (salt);
Run Code Online (Sandbox Code Playgroud)
编译没有错误,但在尝试显示为上面显示的盐时返回一个空字符串.我做错了什么或如何正确地进行转换.任何帮助或建议将受到高度赞赏.
reinterpret_cast不会将一种类型神奇地转换为另一种类型,即使它似乎是这样做的.坦率地说,除非你明白它做了什么,否则你永远不应该使用它.
要使向量包含数组中的字节,请创建向量,然后将字节添加到其中.你不能使用演员表来做到这一点.
SecureVector<byte> salt2(salt, salt + 16);
Run Code Online (Sandbox Code Playgroud)