JDK1.8之后的版本SUN的这个JCE动态库就不见了,替代方法还没去研究。
public static String getSerialNumber(String libraryPath) throws Exception {
CK_C_INITIALIZE_ARGS initArgs = new CK_C_INITIALIZE_ARGS();
String functionList = "C_GetFunctionList";
initArgs.flags = 0L;
PKCS11 pkcs11 = PKCS11.getInstance(libraryPath, functionList, initArgs, false);
long slots[] = pkcs11.C_GetSlotList(false);
for (int i = 0; i < slots.length; i++) {
long slot = slots[i];
CK_SLOT_INFO slotInfo = pkcs11.C_GetSlotInfo(slot);
if ((slotInfo.flags & PKCS11Constants.CKF_TOKEN_PRESENT) == PKCS11Constants.CKF_TOKEN_PRESENT) {
CK_TOKEN_INFO tokenInfo = pkcs11.C_GetTokenInfo(slot);
if (tokenInfo == null || tokenInfo.serialNumber == null) {
continue;
} else {
String serial = new String(tokenInfo.serialNumber);
if (serial.equals("")) {
continue;
}
return serial;
}
}
}
return "";
}
其中输入参数是CSP驱动动态链接库的完整路径。