Кажется, вы решаете самую распространенную проблему , и в результате вы используете шаблон поиска, который является слишком широким.С помощью шаблона поиска вы найдете все объекты, для которых CKA_TOKEN
установлено в значение CK_TRUE
.Это означает, что все сертификаты, все асимметричные (например, RSA) ключи, все симметричные ключи (например, AES), все объекты данных и все другие вещи, которые хранятся на вашем устройстве.
Затем вы используете первый найденный объект(Ключ RSA? Ключ AES? Никто не знает ...) с механизмом CKM_DES3_CBC
, который требует использования функций типа CKK_DES3
и C_EncryptInit
, жалуется на то, что вы указали неверный тип ключа, возвращая ошибку CKR_KEY_TYPE_INCONSISTENT
.
Если вы хотите быть уверены, что найдете только ключи 3DES, чем вам нужно использовать более конкретный шаблон поиска:
List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
objectAttributes.Add(new ObjectAttribute(CKA.CKA_TOKEN, true));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK_DES3));
Еще лучше использовать CKA_LABEL
и / или CKA_ID
для указанияровно один ключ, который вы хотите использовать.И не забудьте прочитать хотя бы «Глава 2 - Область применения», «Глава 6 - Общий обзор» и «Глава 10 - Объекты» спецификации PKCS # 11 v2.20.