2016-11-11 320 views
-1

我使用Crypto++ Salsa20作为我的项目的一部分。上面的链接有一个示例代码,他们在其中定义将byte * {aka unsigned char *}'转换为byte [32] {aka unsigned char [32]}

byte key[32]; 

所以我有一个64字节的字符串。我从SHA256获得了这个值。基本上他们是六面值。所以我相信这可以存储在关键。

string hashVal = "b684f0912266e387eded257b8107b6fc65f0ed97773ecb09078c9a8004d08563"; 

我需要将此值存储到密钥[32]中。我尽我所能将字符串转换为键,但从来没有通过。

byte *plaintextBytes = (byte *) hashVal.c_str(); 
OR 
byte *plaintextBytes = new byte[hashVal.length()]; 
key = passphraseBytes; 

任何人都可以请帮我解决这个问题。

+0

你只是在尝试使用Salsa20或尝试使用安全加密? – zaph

+0

我正在尝试将Salsa20作为我的课程项目的一部分。就像密钥用作密码来加密和解密消息一样。 – sickJuice

+0

你可能会很好地研究诸如十六进制,二进制,Base64,ASCII和unicode之类的编码。 – zaph

回答

0

使用memcpy:

std::memcpy(key, &hashVal[0], std::min(32, hashVal.size()); 

这是假设你并不需要一个空终止。

+0

真棒谢谢! 我试过这个,但最后有一个额外的'p'存储在末尾的memcpy(key,shaval.c_str(),32); 你的逻辑工作就像一个魅力。谢谢@疯狂的埃迪 此外,如果你能帮助我想将hashVal字符串转换为另一个字符串。正如你会注意到hashVal字符串实际上是一个十六进制字符串。所以我想转换十六进制值并将它们存储在一个字符串中(因为两个十六进制值形成一个ASCII字符)。有什么建议么。 – sickJuice

相关问题