使用为 C# 发布的答案@jariq,我能够获得以下内容来PowerShell
更改Admin PIN
.
注意:这专门针对正在被 IDPrime MD 产品线取代的金雅拓 IDPrime .NET 卡。有关更多信息,请参阅这篇文章的结尾。
# www.pkcs11interop.net
Add-Type -Path "C:\Somepath\Pkcs11Interop.4.0.0\lib\net45\Pkcs11Interop.dll"
# Gemalto PKCS11 driver
# 1 = single threaded
$pkcs11 = New-Object Net.Pkcs11Interop.HighLevelAPI.Pkcs11("C:\somepath\gtop11dotnet64.dll",1)
# 0 = SlotsType.WithTokenPresent
$slots = $pkcs11.GetSlotList(0)
$slot = $slots[0] # often its the first
# create session
# 1 = SessionType.ReadWrite
$session = $slot.OpenSession(1)
[byte[]]$defaultPIN = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
# 000000000000000000000001
[byte[]]$newPIN = 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31
# 0 = Security Officer a.k.a. Admin
$session.Login(0, $defaultPIN)
$session.SetPin($defaultPIN, $newPIN)
$session.Dispose()
$slot.CloseAllSessions()
$pkcs11.Dispose()
我发现将每个转换PIN
为字节数组以用于登录和更改PIN
. 要将 48 位 Admin PIN 转换为 24 字节,创建了以下函数。
Function Convert-AdminPinToByteArray([Validatepattern("^[0-9A-F]{48}$")][string]$AdminPIN)
{
$ReturnByte = New-Object byte[] 24
$n = 0
for($i=0;$i -lt $ReturnByte.Length;$i++)
{
$ReturnByte[$i] = [byte]"0x$($AdminPIN.SubString($n,2))"
$n = $n + 2
}
return $ReturnByte
} # End Function Convert-AdminPinToByteArray
金雅拓卡类型
上述示例基于即将退役的金雅拓 IDPrime .NET卡。销售结束 (EOS) 公告在这里。
IDPrime .Net
IDPrime .Net 生物
关键日期:
里程碑日期
最后一次购买 (LTB) 2017 年 9 月 29 日
终止销售 (EOS) 2017 年 9 月 30 日
2018 年 9 月 30 日停产 (EOL)
替换
根据 EOS 公告 PDF:
产品 金雅拓的 IDPrime .NET 510/511 智能卡系列将被IDPrime MD 83x和IDPrime MD 84x系列智能卡所取代。
对替换卡进行编程
我已包含有关区分卡类型的信息,因为我有一个用于测试的金雅拓 IDPrime MD 830,而上述技术不起作用。事实上,使用上述技术,卡片甚至不会显示在读卡器中。