如何用Python结合ePass3003令牌实现数字签名?代码报错及标签疑问
解决ePass3003令牌PyKCS11签名报错及私钥标签查找问题
一、修复AttributeError报错
你的错误源于PyKCS11常量引用方式错误:PyKCS11中CKA、CKO相关常量是以独立变量形式存在的(如CKA_CLASS、CKO_PRIVATE_KEY),而非CKA或CKO字典的属性。代码里CKA.CLASS、CKO.PRIVATE_KEY的写法会触发dict无CLASS属性的报错。
修正要点:
- 将
(CKA.CLASS, CKO.PRIVATE_KEY)替换为(CKA_CLASS, CKO_PRIVATE_KEY) - 将
(CKA.LABEL, 'PrivateKeyLabel')替换为(CKA_LABEL, '实际私钥标签')(标签值需通过后续步骤获取)
二、查找私钥标签
由于ePass3003无法导出私钥,你可以通过遍历令牌中的私钥对象,打印其标签属性来获取真实值:
在登录后添加以下代码:
# 查找所有私钥对象 private_keys = session.findObjects([(CKA_CLASS, CKO_PRIVATE_KEY)]) for idx, key in enumerate(private_keys): # 获取私钥的标签属性 label = session.getAttributeValue(key, [CKA_LABEL])[0] print(f"私钥{idx+1}标签: {label.decode('utf-8') if isinstance(label, bytes) else label}")
运行这段代码会列出令牌中所有私钥的标签,将找到的标签替换到签名代码的CKA_LABEL对应值即可。
三、完整修正后的签名代码
以下是修复错误并支持JSON数据签名的完整代码:
from PyKCS11 import * import json # 初始化PKCS#11库 lib = 'E:/lib_x64/ShuttleCsp11_3003.dll' pkcs11 = PyKCS11Lib() pkcs11.load(lib) # 打开会话 slot = pkcs11.getSlotList()[0] session = pkcs11.openSession(slot) try: # 登录PIN session.login('1234') # 首次运行时打开注释,获取私钥标签后替换target_label # private_keys = session.findObjects([(CKA_CLASS, CKO_PRIVATE_KEY)]) # for idx, key in enumerate(private_keys): # label = session.getAttributeValue(key, [CKA_LABEL])[0] # print(f"私钥{idx+1}标签: {label.decode('utf-8') if isinstance(label, bytes) else label}") # 替换为实际找到的私钥标签 target_label = "你的私钥标签" private_key = session.findObjects([(CKA_CLASS, CKO_PRIVATE_KEY), (CKA_LABEL, target_label)])[0] # 待签名的JSON数据 json_data = {"name": "test", "value": 123} # 将JSON转为字节流(签名需处理二进制数据) data_to_sign = json.dumps(json_data, ensure_ascii=False).encode('utf-8') # 使用RSA_PKCS机制签名 signature = session.sign(private_key, data_to_sign, Mechanism(CKM_RSA_PKCS)) print("签名结果(十六进制):", bytes(signature).hex()) except PyKCS11Error as e: print(f"PyKCS11错误: {e}") finally: session.logout() session.closeSession()
注意事项
- 首次运行时打开查找私钥标签的代码注释,获取真实标签后再替换
target_label。 - JSON数据签名时需先序列化为字节流,确保签名数据的一致性。
- 确保使用的PKCS#11库(ShuttleCsp11_3003.dll)与系统位数(x64)匹配。
内容的提问来源于stack exchange,提问作者aisha
相关产品推荐
相关产品推荐

