如何在.net中导入axaltocm dll [gemalto .net card]

Posted

技术标签:

【中文标题】如何在.net中导入axaltocm dll [gemalto .net card]【英文标题】:how to import axaltocm dll [gemalto .net card] in .net 【发布时间】:2013-06-03 11:27:50 【问题描述】:

如何在 .net 中使用 minidriver for gemalto smart card(axaltocm.dll) 来使用方法

void ChangeReferenceData(byte mode, byte role, byte[] oldPin,byte[] newPin, int maxTries);

我已经从 Windows 更新安装了 gelamto 微型驱动程序。

基本上我想使用 ChangeReferenceData 方法更改 Admin 密钥。

请帮忙。

【问题讨论】:

你创建项目了吗?在您的项目中添加了 .dll 作为参考?我们需要知道您目前在哪里。 @Shane.C 是的,我创建了项目,但是当我尝试添加它时......它显示了一些错误。-[无法添加对“axaltocm.dll”的引用] @codedip 你知道怎么做吗?因为我有同样的问题。 【参考方案1】:

您可以安装金雅拓 SDK http://www.gemalto.com/products/dotnet_card/resources/development.html

添加 CardModule_stub.dll 作为参考

使用 MSCM 服务:

CardModuleService 服务 = (CardModuleService)Activator.GetObject(typeof(CardModuleService),@"apdu://selfdiscover/MSCM")

service.ChangeReferenceData(.......)

【讨论】:

感谢您的回复。它帮助了我。但是,由于我是新手,如果您帮助我提供完整的代码示例,将会非常有帮助。我尝试了代码 - service.ChangeReferenceData(0, 0x02, old, new, -1);但它显示未经授权的操作错误[尝试执行未经授权的操作。]。请帮忙。 我没有试过你正在使用的具体功能,但你可能需要先验证你现有的密码 //byte role = 你要验证的角色,字符串 pincode = 现有的密码 service.VerifyPin(role, Encoding.ASCII.GetBytes(pincode)); if(service.IsAuthenticated(role)) service.ChangeReferenceData(.......) 先在普通用户身上试试。如果您锁定管理员用户,您是否需要丢弃该卡。文档:gemalto.com/dwnld/6263_IDPrime_.NET_Integ_Guide.pdf 再次感谢您的回复。我尝试了相同的方法,但是当我以用户身份验证它有效时,如果是管理员,它会说“值不在预期范围内”。我认为 verifypin 仅适用于用户,对于管理员身份验证,我也使用了 AuthenticateEx。但是对于管理员密钥更改仍然会收到相同的错误消息。它也适用于用户。知道吗???请帮忙 来自 ChangeReferenceData 的文档:oldPin:– 如果角色 = Admin Key 或 Access Manager Admin Key,则它必须是使用 GetChallenge() 获得的质询的有效响应(8 个字节)。 – 如果角色 = 用户,它必须是用户 PIN 的当前值。您是否将 8 字节挑战用于管理员帐户的旧密码?【参考方案2】:

我更改管理员密钥(在金雅拓 IDPrime.Net 智能卡上)的解决方案是:

            byte[] ch = service.GetChallenge();
            String sData = BitConverter.ToString(ch).Replace("-", "");
            byte[] bResp = Encrypt("000000000000000000000000000000000000000000000000", "0000000000000000", sData);//key, and iv
            service.ExternalAuthenticate(bResp);
            if (service.IsAuthenticated(2))//2-Admin,1-User
            
                byte[] ch1 = service.GetChallenge();
                String sData1 = BitConverter.ToString(ch1).Replace("-", "");
                byte[] bResp1 = Encrypt("000000000000000000000000000000000000000000000000", "0000000000000000", sData1);
                service.ChangeReferenceData(0, 2, bResp1, b_newpin , -1);//for Admin PIN
                //service.ChangeReferenceData(0, 1, Encoding.ASCII.GetBytes(userpin), Encoding.ASCII.GetBytes("0001"), -1);//for User PIN
             

【讨论】:

【参考方案3】:

您不能将 dll 引用导入您的项目吗?如果 dll 是非托管代码(例如 c++),则必须使用 dllimport。 http://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx。否则,您只需添加引用即可。

【讨论】:

我也这样做了,但仍然没有运气......它与.net无关,但迷你驱动......任何人都有任何想法

以上是关于如何在.net中导入axaltocm dll [gemalto .net card]的主要内容,如果未能解决你的问题,请参考以下文章

如何构建在unity/c#中导入的c++ dll

在 PowerShell 脚本中导入依赖 DLL

在 F# 中导入/打开 DLL

我们可以从 dll 中导入和导出函数吗

在本机 C++ 项目中导入 C# dll 库

在我的 C++ DLL 中导入方法,然后导出它