Я пытался расшифровать файл с помощью смарт-карты, но получаю странное сообщение.
Я использую PKCS11Interop для вызова C_Decrypt в файле dll, который использует pkcs11.h для связи со смарт-картами.
Это код:
public byte[] Decrypt(byte[] encData)
{
byte[] decrypt = null;
using (Session session = _slot.OpenSession(SessionType.ReadOnly))
using (Mechanism mechanism = new Mechanism(CKM.CKM_RSA_PKCS))
{
decrypt = session.Decrypt(mechanism, _privateKeyHandle, encData);
}
return decrypt;
}
Странно то, что когда я использую смарт-карту Yubico с opensc-pkcs11.dll, она работает нормально.Когда я использую HSID5000 с hsid-pkcs11.dll, происходит сбой с сообщением «C_Decrypt вернул CKR_OPERATION_NOT_INITIALIZED»
Когда я использую ту же смарт-карту (HSID5000), но в pkcs11-tool вместо Pkcs11Interop,это работает:
pkcs11-tool --id 01 --decrypt -p ******** -m RSA-PKCS --module hsid-pkcs11.dll --input-file input.enc
Вот файл pkcs11-logger, созданный с помощью Pkcs11Interop в обоих сценариях (смарт-карта Opensc и смарт-карта HSID)
Файл журнала смарт-карты Yubico opensc:
0x00000b04 : 0x00000734 : Calling C_Decrypt
0x00000b04 : 0x00000734 : Input
0x00000b04 : 0x00000734 : hSession: 35424832
0x00000b04 : 0x00000734 : pEncryptedData: 0000000002E334C0
0x00000b04 : 0x00000734 : *pEncryptedData: HEX(793...D99)
0x00000b04 : 0x00000734 : ulEncryptedDataLen: 256
0x00000b04 : 0x00000734 : pData: 0000000002E346E0
0x00000b04 : 0x00000734 : pulDataLen: 000000000042EB48
0x00000b04 : 0x00000734 : *pulDataLen: 7
0x00000b04 : 0x00000734 : Output
0x00000b04 : 0x00000734 : pData: 0000000002E346E0
0x00000b04 : 0x00000734 : pulDataLen: 000000000042EB48
0x00000b04 : 0x00000734 : *pData: HEX(730D0A730D0A73)
0x00000b04 : 0x00000734 : *pulDataLen: 7
0x00000b04 : 0x00000734 : Returning 0 (CKR_OK)
Файл журнала смарт-карты HSID:
0x00001b90 : 0x00000d94 : Calling C_Decrypt
0x00001b90 : 0x00000d94 : Input
0x00001b90 : 0x00000d94 : hSession: 12274064
0x00001b90 : 0x00000d94 : pEncryptedData: 0000000002E6A300
0x00001b90 : 0x00000d94 : *pEncryptedData: HEX(49B....527)
0x00001b90 : 0x00000d94 : ulEncryptedDataLen: 256
0x00001b90 : 0x00000d94 : pData: 0000000002E6B520
0x00001b90 : 0x00000d94 : pulDataLen: 00000000004AE938
0x00001b90 : 0x00000d94 : *pulDataLen: 256
0x00001b90 : 0x00000d94 : Returning 145 (CKR_OPERATION_NOT_INITIALIZED)
Может ли кто-нибудь помочь мне с этим?
Обновление № 1:
Полный файл журнала дляhsid-pkcs11.dll - здесь
Обновление № 2: (Решение!)
После замечательного комментария от jariq токен HSID не любит множественные вызовыC_Decrypt, поэтому я использовал его обертку, но вместо библиотеки HighLevel я использовал библиотеку Lowlevel и вызывал C_Decrypt только один раз.И это сработало!
Спасибо всем вам.