解析 EMV 事务中 GET PROCESSING OPTIONS 命令的 PDOL

2023-11-25

我正在尝试构建一个格式正确的 GET PROCESSING OPTIONS 命令以发送到非接触式 EMV 卡。这个帖子非常有帮助,但我只需要了解更多细节。

解析 PDOL 时,是否可以安全地假设每个标签的长度为 2 个字节,后跟预期返回的数据大小?

例如,PDOL9F66049F02069F37049F1A02被分解成9F66 04, 9F02 06等,每个都有 2 个字节标签和 1 个字节用于数据值的预期长度。

解析时假设每个标签的长度是 2 个字节是否安全?


不,您不能期望每个标签都包含两个字节(尽管大多数标签都是如此)。 EMV 中的标签长度​​值 (TLV) 结构遵循 ASN.1 编码规则(基本编码规则,BER)。有关更多信息,请参阅以下文档:

  • ITU-T X.690:ASN.1编码规则: 基本编码规则(BER)规范, 规范编码规则 (CER) 和 杰出编码规则 (DER)
  • ASN.1、BER 和 DER 子集的外行指南(作者:Burton S. Kaliski Jr.)

后者是一个非常好的介绍,帮助我入门。

一个TLV结构(数据对象)由标签值、长度值和数据负载(值)组成:



+-----------+-----------+-----------+
|    Tag    |  Length   |   Value   |
| (N Bytes) | (M Bytes) | (L bytes) |
+-----------+-----------+-----------+
  

PDOL(以及任何其他数据对象列表,DOL)包含一个或多个此类数据对象的标签和长度部分。类似地,PDOL相关数据包含PDOL中引用的DO的值部分。标签和长度部分都可以由一个或多个字节组成。

对于标签部分,规则大概是这样的(更多细节参见上面的参考资料):

  • 如果第一个标签字节的低 5 位全为 1(tag[0] & 0x01F == 0x01F),那么标签至少由两个字节组成。
  • 如果下一个标签字节的高位是一(tag[i] & 0x080 == 0x080),那么标签又多了一个字节。对于每个后续字节都会重复此操作。

对于长度部分,规则大约是这样的(更多细节参见上面的参考资料):

  • 如果第一个长度字节的高位为零(length[0] & 0x080 == 0),然后剩下的七位编码长度值(length[0] & 0x07F).
  • 如果第一个长度字节的高位是一(length[0] & 0x080 == 0x080),那么剩下的7位编码了长度部分的剩余字节数(length[0] & 0x07F)。其余字节将长度值表示为无符号整数,最高有效位在前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析 EMV 事务中 GET PROCESSING OPTIONS 命令的 PDOL 的相关文章

  • ASN.1 常用类型 编码详解 入门

    文章目录 编码结构 标识符 Identifier 长度 Length 短形式 长形式 内容 Contents 基本类型 布尔类型 BOOLEAN 整形 INTEGER 实数 REAL 枚举类型 ENUMERATED 二进制的编码 十进制的编
  • 调制方式性能比较--BER,频带效率的极限

    文章目录 1 BER性能 1 1AWGN的QPSK 1 2常用的误比特率公式 2 频带效率 2 1香农定理 2 2两个重要的区域 2 3对于各个信号 1 BER性能 1 1AWGN的QPSK AWGN信道中无符号间干扰的QPSK的BER经常
  • 生成 AC 命令上的 Android isoDep.transceive 始终返回 6D00 不受支持

    我正在尝试模拟 PoS 销售点 系统并使用在 2013 年 Nexus 7 无安全元件 v4 4 2 上运行的 Google 钱包完成交易 我的 PoS 原型也在 2013 Nexus 7 v4 4 2 上运行 我能够从 2PAY SYS
  • 读取EMV卡公共数据

    说我想读书publicEMV 卡的要素 我将列出一些我认为涉及的步骤 1 First select application In order to select application we must 1 find out AID of a
  • 如何向 HCE 设备发送命令 APDU?

    我的应用程序的 AID 是F239856324897348我为其构建了一个 SelectAID APDU 现在我如何实际将其发送到使用主机卡模拟的接收 Android 设备 我创建了 HCE 服务 以响应 APDU 进行响应 如以下线程所示
  • 解析 EMV 9F10 令牌

    我收到以下信息IAD处理后GPO command 那么我的问题是 怎么样9F10 EMV token建造 这是令牌 06010A03A020000F04000000000000000000006232E4F9 我只需要发送CVR部分到采集开
  • 将 XML Dsig 格式转换为 DER ASN.1 公钥

    我正在开发一个 iPhone 应用程序 它从 ASP NET Web 服务中检索 RSA 公钥 格式如下
  • 使用 go 结构进行 ASN.1 解组会出现标签不匹配错误

    我正在尝试对以下定义执行 ASN 1 marshal unmarshal 操作 ACEI SEQUENCE message MessageFields neRegNumber OCTET STRING OPTIONAL gpsInfo Gp
  • 如何在 PHP 中创建和解析标签、长度、值 (TLV) 并将其编码为 Base64

    政府出台了一项新规定 要求所有增值税注册公司在新电子发票中使用二维码 QR 码字段应采用标签长度值 TLV 格式进行编码 标签值在相邻表的 标签 列中指定 TLV编码应如下 Tag 前面提到的以一个字节存储的标签值 长度 字段值进行UTF8
  • Mifare Classic 1K 的锁定机制

    Mifare Classic 1K的流程是 轮询标签 验证这些标签 如果身份验证成功 则进行读 写 我已经完成了这些过程 并且还从特定扇区读取和写入数据 命令为轮询标签 is new byte byte 0xFF byte 0x00 byt
  • 如何防止NFC标签克隆?

    我正在使用 NFC 标签制作一个应用程序 并且必须防止 NFC 标签被克隆 我见过许多其他 NFC 标签 当尝试克隆时 会显示弹出消息 克隆受到限制 标签由密钥保护 我希望我的 NFC 标签具有相同的安全性 这取决于您使用的标签类型以及您想
  • ASN.1 DER 格式的私钥

    为什么模数要用前导零填充 我正在阅读 PKCS 1 和 PKCS 8 但没有找到任何相关内容 在 C 中 必须删除前导零 有人知道为什么吗 At http etherhack co uk asymmetry docs rsa key bre
  • Delphi 中的任何 Asn1 实现

    Delphi 中是否有任何不错的 asn1 实现或库 Try StreamSec ASN 1 工具 http www streamsec com products stasn1 asp 它们也出现在合作伙伴 DVD 中
  • 如何读取基于EMV的智能VISA卡详细信息

    我正在尝试从 VISA 卡读取信用卡数据 但无法成功 正如在互联网资源中我发现对于 MASTER 卡 我们可以使用 1PAY SYS DDF01 文件选择 PSE 目录 然后阅读记录 但对于 VISA 来说 它不是强制性的 当我使用 SEL
  • OpenSSL ASN.1 编程教程

    我正在寻找有关使用 OpenSSL 库进行 ASN 1 DER 编码的任何 C C 教程 示例代码或文档 好吧 正如您在 openssl 网站上看到的那样 没有 ASN 1 函数的官方文档 但你总是可以下载 openssl 源 http o
  • 使用 PPSE 而不是 PSE 读取 EMV 卡

    我正在尝试读取非接触式 Visa Paywave 卡上的数据 对于 Paywave 我必须使用 PPSE 2PAY SYS DDF01 而不是 PSE 1PAY SYS DDF01 提交 SELECT EMV 书籍 1 第 11 3 4 节
  • 从 Mastercard/VISA 借记卡/信用卡读取 EMV 数据 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试构建一个应用程序来读取 编码卡上的数据 如 PAN 到期日 客户名称 PIN 等信息 到目前为止 我发现我需要发送 APDU
  • 在 C# 中创建 ASN1 编码签名以发送到 Java

    我有一个私人 公共安全证书 我的 Java 同行拥有公钥 我需要获取一个字符串 对其进行签名 然后将其发送到 Java 然后验证数据和签名 微软和世界其他地方如何编码 签名数据似乎存在一个众所周知的问题 即有关字节处理方式的问题 这是众所周
  • 是否可以在 NFC 卡中实现令牌队列?

    这个问题专门针对 MIFARE Ultralight C EV1 或 MIFARE DESFire EV1 甚至 NTAG 卡 我想实现一个令牌系统 以便每次普通用户读取其中一张卡时 他们都会获得一个可用令牌 该令牌将从他们正在读取的 NF
  • 验证使用 BER/DER 编码的 ASN.1 格式的 C# 中的 DSA 签名

    如何在 C 中验证 DSA 签名 Given 消息文本 签名摘要 通常为 ASN 1 DER 格式 公钥 采用签名的 X 509 证书 PEM 或 DER 格式 我尝试了多种方法 但都没有成功 OpenSSL NET http openss

随机推荐

  • JavaScript 语句中的变量

    如何在此 JavaScript 语句中添加变量字符串 其中 name 可以对应于任何有效的字符串 例如 WebkitTransform 或 Moztransform 等 document getElementById test style
  • 将对象添加到列表时出现空引用异常[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 当我尝试将对象添加到对象内的列表时 即使该对象的所有属
  • 为什么元组不会收到未使用的变量警告?

    在下面的示例中 使用编译 Wall 一些未使用的变量不会被警告 include
  • 自定义 Elastalert 插件收到的警报中的信息

    我已经使用我的 elasticsearch 主机配置了 elastalert 实例 我还创建了一个示例规则 该规则将在日志中匹配该模式时检查日志级别和警报 一切工作正常 我在我的松弛通道上正确收到警报 唯一关心的是我收到的警报中的信息 数据
  • Java中的大类分解

    我刚刚开始学习 Java 很好奇 Java 中是否有良好的对象分解实践 我来描述一个问题 在大型软件项目中 它总是像 core 或 ui 这样的大类 它们往往有很多方法 并且旨在作为较小类之间的中介 例如 如果用户单击某个窗口上的按钮 则该
  • 使用 C# 为每三位数字添加逗号

    我想使用 C 每 3 位数字向十进制数字添加逗号 我写了这段代码 double a 0 a 1 5 Interaction MsgBox string Format 0 0 a 但它返回2 我哪里错了 请描述我该如何修复它 double a
  • WPF 用户控件不随主窗口调整大小

    我正在尝试制作一个 WPF 用户控件 其中包括两个组框和两个ListView每个组框中都有 s 以下是用户控件的 XAML 代码
  • Swift 错误:“序列”要求类型“T”和“ArraySlice”等效

    我正在尝试更新数学库以与 Swift 3 兼容 但遇到错误 Sequence requires the types T and ArraySlice
  • 如何在bash中对多行进行排序?

    我正在尝试对名称列表进行排序 后跟另一个字符串 例如 John Doe AVAIL Sara Doe CALL Jim Doe AVAIL 我试图按名称对它们进行排序 但似乎无法通过排序来弄清楚 有人可以提供一些指导吗 我的最终输出如下所示
  • 将文本添加到图像文件

    我需要向图像文件添加文本 我需要读取一个图像文件 jpg png gif 并且需要向其中添加一行文本 在 GDI 中 您可以使用 Image 类读取文件 然后使用 Graphics 类向其中添加文本 就像是 Image image Imag
  • PHP中的动态类方法调用

    有没有办法动态调用 PHP 同一类中的方法 我的语法不正确 但我想做类似的事情 this gt methodName arg1 arg2 arg3 有不止一种方法可以做到这一点 this gt methodName arg1 arg2 ar
  • 检测 ios 应用程序是否在 iPhone、iPhone Retina 显示屏或 iPad 上运行的代码是什么?

    检测 ios 应用程序是否在 iPhone iPhone Retina 显示屏或 iPad 上运行的代码是什么 背景 对于我的 iPhone 应用程序 我在 XCode 目标 摘要页面中定义了特定图像 iPhone 启动图像 iPhone
  • 使用键盘热键启动 powershell 脚本

    我想使用键盘上的热键 例如 CTRL SHIFT F 执行 powershell 脚本 ps1 文件 我设法创建脚本的快捷方式 右键单击资源管理器 gt 新建 gt 快捷方式 快捷方式的目标是 SystemRoot system32 Win
  • 如何使用 MongoDB 聚合获取每个组的第一个,包括空值?

    在我的 MongoDB 中people我需要过滤具有相同 别名 属性值的人 保留其中的第一个 并保留所有具有空 别名 的人 一些样本人员数据 id 1 flag true name Alice alias null id 2 flag tr
  • 如何从 nuxt 插件发出事件?

    我正在创建一个插件 它将发出由套接字触发的基本 nuxt 事件 然后将接收 nuxt 事件并打开一个小吃店 当在组件内部时 可以通过使用轻松发送和接收事件 nuxt this nuxt on open snackbar this handl
  • Android:在片段之间传递对象

    在开始之前 我先浏览了以下问题 在片段之间传递数据 屏幕重叠 如何在Fragment之间传递值 以及 Android 文档 http developer android com training basics fragments commu
  • JUnit Eclipse 插件源代码?

    我正在考虑为 FlexUnit 编写一个 Eclipse 插件 并且想知道在哪里可以获取 JUnit Eclipse 插件的源代码 我检查了 sourceforge 上的 JUnit 源代码 但找不到任何看起来像插件代码的代码 知道这个代码
  • 谁能解释一下 gitcherry-pick 的作用吗?

    正如我在这里担心的那样 我在另一个本地分支中有旧的提交 包含 abc cpp def cpp 现在几个月后我想使用这些更改 但在我当前的分支 abc cpp 已升级 那么 如果我挑选的话 它是否会将旧 abc cpp 的更改集成到新 abc
  • 缺少 Hive 执行 Jar:/usr/local/hadoop/hive/lib/hive-exec-*.jar

    我在 Ubuntu 机器上设置的单节点集群上运行 Hadoop 1 0 4 我执行了以下步骤来下载并安装配置单元版本 gt svn co http svn apache org repos asf hive trunk hive gt cd
  • 解析 EMV 事务中 GET PROCESSING OPTIONS 命令的 PDOL

    我正在尝试构建一个格式正确的 GET PROCESSING OPTIONS 命令以发送到非接触式 EMV 卡 这个帖子非常有帮助 但我只需要了解更多细节 解析 PDOL 时 是否可以安全地假设每个标签的长度为 2 个字节 后跟预期返回的数据