如何在PBKDF2中生成pkcs11interop密钥生成的属性模板。
以下是我的试用代码:
byte[] randomSalt = session.GenerateRandom(20);
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKZ.CKZ_SALT_SPECIFIED));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_VALUE, randomSalt));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, 1000));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, 0x00000004));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_VALUE, new byte[] { }));
objectAttributes.Add(new ObjectAttribute(CKA.CKA_VALUE, Encoding.UTF8.GetBytes("password")));Mechanism mechanism = new Mechanism(CKM.CKM_PKCS5_PBKD2); objectHandle objectHandle = session.GenerateKey(mechanism, objectAttributes);
这样我就得到了CKR_MECHANISM_INVALID异常
发布于 2018-03-22 23:10:08
第一个问题是,您试图通过ObjectAttribute-s列表而不是CkPkcs5Pbkd2Params类实例向CkPkcs5Pbkd2Params机制提供参数。要获得更多信息,请看一看PKCS#11 v2.20规范的12.26.9章。
第二个问题是,您的非托管PKCS#11库很可能根本不支持CKM_PKCS5_PBKD2机制,因为通过返回CKR_MECHANISM_INVALID错误,您的非托管PKCS#11库告诉您“向加密操作指定了无效的机制”。可以使用GetMechanismInfo()方法检查是否支持该机制:
if (!slot.GetMechanismList().Contains(CKM.CKM_PKCS5_PBKD2))
throw new Exception("Unmanaged PKCS#11 library does not support CKM_PKCS5_PBKD2 mechanism");https://stackoverflow.com/questions/49423938
复制相似问题