ISO 8583 Parser
免费 · 参考 · 更新于 2026-08-25
在线速查

ISO 9564 PIN Block 格式 —— 这是哪一种

贴一个明文 PIN block,本页告诉你它是哪种格式、声明的 PIN 长度是多少,以及还能读出什么、读不出什么。本页不做 PIN 还原,这是刻意的。

PIN block —— DE52

PIN 从不以数字的形式传输。它被装进一个固定长度的块里,和填充放在一起,多数格式还要和卡号混合,然后加密。块格式说的就是这个装法。

知道格式在两套系统对不上时才要紧 —— 「同一个 PIN 在一台主机上验得过、换一台就不过」通常就是这个原因。

试试:

五种格式

它们的开头都一样:第一个字符是格式号,第二个是 PIN 长度。不同的是填充方式,以及要不要把卡号掺进来。

首字符格式块长卡号用在哪
0Format 0(ISO-0,也叫 ANSI X9.8)8 字节联机 PIN 转加密里最常遇到的一种
1Format 1(ISO-1)8 字节不要拿不到卡号时用,比如改密
2Format 2(ISO-2)8 字节不要只用于和芯片做脱机验证,不会送到联机上
3Format 3(ISO-3)8 字节和 format 0 一样,只是填充是随机的而不是固定的
4Format 4(ISO-4)16 字节AES 时代的格式,新建系统都按它来

多数系统之间交换的是 format 0。format 2 值得单独点出来:它是为和芯片做脱机验证定义的,本来就不该出现在联机链路上 —— 在网络抓包里看到它,说明有配置错了,不是发现了什么妙招。

为什么格式和长度能活下来,别的活不下来

format 0 和 format 3 里,这个块是 PIN 域和一个由卡号构造出来的域逐字符混合的结果。那个域的开头是四个零字符 —— 所以 PIN 域的前两个字符原样穿过来了。这就是本页能在什么都不知道的情况下叫出一个 format 0 块的格式和长度的全部原因。

那两个字符之后的所有东西都和卡号混过,所以你在那里看到的数字不是 PIN。要把这个混合倒回去需要卡号,而倒回去的结果就是 PIN。这就是本页读两个字符就停下的原因。

你抓到的那个 DE52 是加密的

PIN block 只在硬件加密机内部以明文存在。走在 DE52 里的是这个块在与下一跳共享的密钥下加密后的结果,每一跳解开、再用下一跳的密钥重新加密 —— 也就是 PIN 转加密。

加密会把每个字符都打乱,包括前两个。所以把网络抓包里的 DE52 贴进本页,第一个字符通常不在 0 到 4 之间;偶然落在里面时,它报出来的格式也只是巧合。如果这个值来自线上,诚实的答案是你判断不出里面是什么 —— 没有密钥的人都判断不出。

本页有用的场合在这条链路的另一端:当你在加密之前构造或调试这个块、想确认格式和长度和你预期的一致时。

format 4 变了什么

format 0 到 3 是围绕八字节分组密码设计的。format 4 是为 AES 做的,所以块从八字节变成十六字节,填充规则变了,卡号域和 PIN 域是用密码算法结合的,不再是简单的逐字符混合。

迁移期间的实际后果是:一套按 format 0 预期的系统读不懂 format 4 的块,而失败表现出来像是「PIN 错误」,不像是「格式不匹配」。任何一侧改动之后 PIN 校验开始成片失败时,第一个该看的就是格式号那个字符。

本页不做什么

不做 PIN 还原。不会从 format 0 的块加卡号还原,不会从 format 1 或 2 的块还原,任何形式都不做。

格式本身是公开标准、值得讲清楚,这也是本页存在的目的。而一个能把块还原成 PIN 的工具是另一回事,我们不会公开。真要校验 PIN,那件事属于持有密钥的硬件加密机内部 —— 整套设计本来就是要它发生在那里。

数据不出浏览器。判断全在本页的 JavaScript 里跑,而且只读前两个字符。即便如此,明文 PIN block 是支付系统里最敏感的值之一 —— 如果你们的规定是它绝不碰浏览器,离线版存在的意义正是让你能守住这条。