Ich studiere C++ unabhängig und ich habe ein Problem, das ich mehr als Woche nicht lösen kann. Ich hoffe ihr könnt mir helfen.Erhalten SHA1 der Unicode-Zeichenfolge in Crypto ++
Ich brauche eine SHA1 Digest einer Unicode-Zeichenfolge (wie Привет
), aber ich weiß nicht, wie das geht.
Ich habe versucht, es so zu machen, aber es gibt einen falschen Digest zurück!
Für wstring('Ы')
Es gibt - A469A61DF29A7568A6CC63318EA8741FA1CF2A7
Ich brauche - 8dbe718ab1e0c4d75f7ab50fc9a53ec4f0528373
Grüße und sorry für mein Englisch :).
CryptoPP 5.6.2 MVC++ 2013
#include <iostream>
#include "cryptopp562\cryptlib.h"
#include "cryptopp562\sha.h"
#include "cryptopp562\hex.h"
int main() {
std::wstring string(L"Ы");
int bs_size = (int)string.length() * sizeof(wchar_t);
byte* bytes_string = new byte[bs_size];
int n = 0; //real bytes count
for (int i = 0; i < string.length(); i++) {
wchar_t wcharacter = string[i];
int high_byte = wcharacter & 0xFF00;
high_byte = high_byte >> 8;
int low_byte = wcharacter & 0xFF;
if (high_byte != 0) {
bytes_string[n++] = (byte)high_byte;
}
bytes_string[n++] = (byte)low_byte;
}
CryptoPP::SHA1 sha1;
std::string hash;
CryptoPP::StringSource ss(bytes_string, n, true,
new CryptoPP::HashFilter(sha1,
new CryptoPP::HexEncoder(
new CryptoPP::StringSink(hash)
)
)
);
std::cout << hash << std::endl;
return 0;
}
* "Ich habe versucht, es so zu machen, aber es liefert einen falschen Digest!" * - Der Crypto ++ Code sieht gut aus, also liegt das Problem wahrscheinlich woanders.Welchen Digest produziert er und welche Digest erwarten Sie? Ich * vermute * Sie benötigen einen Auszug der breiten Zeichenfolge in UTF-8 konvertiert. UTF-8 ist am interoperabelsten. Fügen Sie den erwarteten und tatsächlichen Digest zu Ihrer Frage hinzu, indem Sie auf * Bearbeiten * klicken (und nicht als Kommentar veröffentlichen). – jww