سؤال

أنا أكتب تطبيق اختبار لـ Microsoft Cryptoapi. أرغب في تصدير المفتاح السري لطرف واحد باستخدام المفتاح العام للطرف الثاني ، ثم استيراد هذا المفتاح السري كمفتاح سري للطرف الثاني (هذا يضع مفتاحًا سريًا مشتركًا للاتصال). ها هو رمزتي:

if(!CryptExportKey(encryptT->hSymKey, decryptT->hPubKey, SIMPLEBLOB, 0, keyExBuf, &bufLen)) {
    FormattedDebugPrint(NULL, GetLastError(), "could not export secret key", TRUE);
    return -1;
}
if(!CryptImportKey(decryptT->hCryptProv, keyExBuf, bufLen, decryptT->hPubKey, 0, &(decryptT->hSymKey))) {
    FormattedDebugPrint(NULL, GetLastError(), "could not import secret key", TRUE);
    return -1;
}

وهذا يعطي الخطأ:

80090001: Bad UID.

يتم إنشاء keypair العام لكل من incryptt و decryptt (المرسل ، المتلقي) عن طريق الاتصال:

CryptGenKey(encryptT->hCryptProv, CALG_RSA_KEYX, CRYPT_EXPORTABLE, &(encryptT->hPubKey))

أي فكرة عما يمكن أن يسبب الخطأ؟

شكرًا،

هل كانت مفيدة؟

المحلول

لا يهم ، لقد اكتشفت ذلك. في الأساس ، لا يمكنك فقط استخدام مفتاح عام آخر مباشرة حتى لو تم تهيئته بنفس الطريقة - كنت بحاجة إلى تصدير هذا المفتاح العام أولاً ، ثم استيراده باستخدام مقبض مزود التشفير للطرف الآخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top