我们必须使用Gemalto IDPrime .Net卡智能卡。我们得到这些USB Dongles并且必须更改PIN。
金雅拓通过Windows说:
From the Start menu, choose Run and type PINTool. Insert a IDPrime .Net card in the reader as prompted, and click OK. The change PIN interface appears Enter the old PIN (the default PIN value is 0000), the new PIN and confirm the new PIN. Click on Change Pin
http://support.gemalto.com/index.php?id=how_to_change_pin_in_a_idprime#.VWYTWUa8rV8
这有效,但我想通过powershell或c#设置新的PIN /密码,i。即在一个程序的控制下。 怎么做或不可能?
答案 0 :(得分:3)
您应该能够通过非托管PKCS#11 API更改PIN,这些API可以通过我作为作者的托管.NET包装器Pkcs11Interop从C#轻松访问。
以下是可帮助您入门的代码示例:
using Net.Pkcs11Interop.Common;
using Net.Pkcs11Interop.HighLevelAPI;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
// Load PKCS#11 library provided by Gemalto
using (Pkcs11 pkcs11 = new Pkcs11("gtop11dotnet.dll", true))
{
// Find first slot/reader with token/card present
Slot slot = pkcs11.GetSlotList(true)[0];
// Open RW session
using (Session session = slot.OpenSession(false))
{
// Login as normal user with current PIN
session.Login(CKU.CKU_USER, "0000");
// Set the new pin for the logged in user
session.SetPin("0000", "1111");
session.Logout();
}
}
}
}
}
答案 1 :(得分:0)
使用针对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位管理员密码转换为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 卡,这些卡正在退役。 End of Sale (EOS) announcement is here。
IDPrime .Net IDPrime .Net Bio Key Dates: Milestone Date Last-Time-Buy (LTB) September 29, 2017 End-of-Sale (EOS) September 30, 2017 End-of-Life (EOL) September 30, 2018
产品Gemalto的IDPrime .NET 510/511智能卡系列将被 IDPrime MD 83x 和 IDPrime MD 84x 系列智能卡取代。
我已经提供了有关区分卡类型的信息,因为我有一个Gemalto IDPrime MD 830用于测试,上述技术不起作用。实际上,使用上述技术,卡片甚至不会显示在阅读器中。