在 python 中使用智能卡在网站上进行身份验证

Posted

技术标签:

【中文标题】在 python 中使用智能卡在网站上进行身份验证【英文标题】:Authentication on website using smart card in python 【发布时间】:2020-05-23 13:20:40 【问题描述】:

所以我有一张公司提供的智能卡,它看起来像一张带芯片的信用卡。 此卡插入读卡器后登录网站。

现在我必须在 python 中编写一个程序,它可以读取卡并使用Requests 模块登录该网站。 我试图找出如何使用 python 脚本从卡中检索此身份验证数据,然后使用此数据,但我部分成功。我安装了pyscard

from smartcard.System import readers
from smartcard.util import toHexString

r=readers()
print(r)

connection = r[0].createConnection()
connection.connect()
SELECT = [0xA0, 0x88, 0x00, 0x00] # CLA, INS, P1, P2
DF_TELECOM = [ 0x02, 0x7F, 0x10]  # Lc, Data, Le
data, sw1, sw2 = connection.transmit( SELECT + DF_TELECOM )

到目前为止,我能够传输数据并从卡中检索一些数据。 我在 INS (来源:ISO 7816) 中发送了命令 88,该命令用于某种内部身份验证(我假设此身份验证数据用于登录网站),但我得到以下响应:

data = []
sw1 = 110
sw2 = 00

我在 ISO 7816 中找不到此响应的含义。有人能告诉我我是否有正确的方法或提示可以从这里继续前进吗?总之,我想知道如何使用python脚本和智能卡登录网站?

【问题讨论】:

您的回复基本上是 6E00,意思是“不支持类”。我的问题是“你知道这是哪张卡吗?”。您可以在此处分享卡的 ATR。 ATR 只是为了了解这张卡。有没有 APDU 通讯指南。 没有。顺便说一句,这是验证网站的正确方法吗? 您的卡使用的是 CardOS 5.x 吗?如果是这样,你看过这个吗? github.com/OpenSC/OpenSC/issues 跟随此链接ttfn.net/techno/smartcards/iso7816123.html 似乎88 是无效响应(未找到数据).. 是否有机会将INS 值替换为0x00?它应该将整个卡片数据作为响应流式传输 【参考方案1】:

基本上,您得到的响应本质上是“6E00”,意思是“不支持类”,只需将“INS”值替换为 0x00 就可以了

【讨论】:

以上是关于在 python 中使用智能卡在网站上进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用智能卡身份验证进行自动化测试(硒或其他选项?)

在 iOS 上使用智能卡进行 TLS 身份验证

使用 asp.net web api 令牌在 mvc 网站上进行身份验证

无法使用 python minds api 进行身份验证

通过访问令牌进行的 Python Social auth 身份验证失败

使用浏览器中现有的经过身份验证的会话在python上执行https请求