편집 : 조언을 취한 후 매개 변수 & 유형을 재정렬했습니다. 하지만 digest() 함수를 호출하면 응용 프로그램이 충돌합니까? 어떤 아이디어가 잘못 됐나요? 나는 C++에서 SHA256 알고리즘의 오픈 소스 구현을 사용하고왜 그들은 일반 문자열이나 'char *'가 아닌 'unsigned char *'를 원하십니까
const std::string message = "to be encrypted";
unsigned char* hashMessage;
SHA256::getInstance()->digest(message, hashMessage); // crash occurs here, what am I doing wrong?
printf("AFTER: n"); //, hashMessage); // line never reached
. 내 문제는 해싱 될 수 있도록 내 문자열의 부호없는 char * 버전을 전달하는 방법을 이해하는 것입니다.
void SHA256::digest(const std::string &buf, unsigned char *dig) {
init();
update(reinterpret_cast<const unsigned char *>(buf.c_str()), static_cast<unsigned int>(buf.length()));
final();
digest(dig);
}
이 어떻게 부호없는 문자에 (내가 해시 원하는) 내 문자열을 변환 할 수 있습니다 * :
이 내 문자열의 서명 숯불 * 버전이 걸리는 기능은 무엇입니까?
내가 문자열의 내용을 인쇄에 갈 때 내가 만든 다음 코드는 런타임 오류가 발생합니다
const std::string hashOutput;
char message[] = "to be encrypted";
printf("BEFORE: %s bb\n", hashOutput.c_str());
SHA256::getInstance()->digest(hashOutput, reinterpret_cast<unsigned char *>(message));
printf("AFTER: %s\n", hashOutput.c_str()); // CRASH occurs here
PS : 나는 SHA256 &의 많은 구현에서 찾고있다 모두가 서명 숯불을 * 해시 할 메시지로. 왜 그들은 그렇게합니까? 왜 char * 또는 문자열 대신?
이 코드는별로 의미가 없습니다. 왜 당신의'message'는 당신의'hashOutput'' const'를 변경할 수 있습니까? 버퍼 오버런을 피하기 위해 무엇을하고 있습니까? 사용중인 라이브러리에 대한 문서에 대한 링크를 추가하십시오. – Mankarse
@Mankarse : 여기 구현 된 sha256 알고리즘을 사용하고 있습니다. http://tinypasswordmanager.googlecode.com/svn – user593747
질문에 이미 답변 해 놓은 질문을 편집하지 마십시오. 여기에 몇 가지 조언이이 질문에 대답한다면, 그 조언을 받아들입니다. 몇 가지 의견에서 해결할 수없는 다른 문제가 발생하면 새로운 질문을하십시오. – sbi