Es mag sein, dass es die sehr kurzen Tasten, die Sie verwenden, einfach nicht mag.
Ich fand the desktop version of that article, die helfen können, da es ein vollständiges Beispiel hat.
EDIT:
Die OP aus dem Beispiel realisiert, dass Sie CryptGenKey, wie lange die Tasten, die Sie tun, indem Sie die Top-Einstellung 16-Bits der Fahnen auf die Anzahl von Bits, die Sie verwenden möchten, zu sagen haben . Wenn Sie dies als 0 belassen, erhalten Sie die Standardschlüssellänge. Diese ist dokumentiert in der Bemerkungen Abschnitt der Gerätedokumentation, und mit dem dwFlags Parameter in der desktop documentation.
Für den Diffie-Hellman-Schlüsselaustauschalgorithmus verwendet der Basisanbieter standardmäßig 512-Bit-Schlüssel und der Enhanced-Anbieter (Standardeinstellung) 1024-Bit-Schlüssel, unter Windows XP und höher. Es scheint keine Dokumentation für die Standardlängen auf CE zu geben.
sollte der Code daher sein:
BYTE p[64] = { 139 }; // little-endian, all other bytes set to 0
BYTE g[64] = { 5 };
CRYPT_DATA_BLOB pblob;
pblob.cbData = sizeof(p);
pblob.pbData = p;
CRYPT_DATA_BLOB gblob;
gblob.cbData = sizeof(g);
gblob.pbData = g;
HCRYPTKEY hKey;
if (::CryptGenKey(m_hCryptoProvider, CALG_DH_SF,
(512 << 16) | CRYPT_PREGEN, &hKey))
{
::CryptSetKeyParam(hKey, KP_P, (LPBYTE) &pblob, 0);
Danke, Mike-- Ich fand (aus deiner Quelle), dass es * zwei * Dinge waren. Sie müssen CryptGenKey die Schlüssellänge mitteilen, indem Sie die Länge in Bits, die um 16 nach links verschoben sind, in den flags -Parameter (oderokumentiert, natürlich müssen Sie das Sample lesen). * Auch *, die Schlüssellänge muss mindestens 512 Bit sein. –