저는 AES로 문자열을 암호화하기 위해 Crypto ++를 사용하고 있습니다. 좋아, 잘 작동하지만 지금은 키 값을 바이트 값을 반환하는 함수를 만들고 싶습니다.Crypto ++에서 바이트 값을 반환하려면 어떻게해야합니까?
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]
일식을 설정하면 나에게 반환되는 것으로 보이는 경고를 보여줍니다. 그러나 마지막으로 return 키에 잘못된 변환에 대한 이상한 오류가 있습니다.
왜 이런 일이 발생합니까?
이 문제를 어떻게 해결할 수 있습니까?
편집 : 음. 이제 저는이 2 가지 기능을 가지고 있습니다. 하지만 첫 번째 작품은 에이스 키의 64자를 반환합니다. (gen_all)
두 번째 - 이유를 모르겠 음 - 단지 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()는 sizeof (key.size)가 아니요
http://stackoverflow.com/questions/388242/ the-definitive-c-book-guide-and-list). 그리고 당신은 그것을 급히 필요로합니다. – sbi
형식 바이트가이 라이브러리의 네이티브이기 때문에 더 나은 제 질문을 읽고 Crypto ++에 대해 알아야합니다. –
@ user840718':'@sbi가 특정 키워드 (예 : 'byte'등)의 출현과 관련이 있음을 암시한다고 생각하는 이유를 직접 알지 못합니다. – sehe