556

诸如此类的新闻报道表明,上述数字可能是作为编程错误出现的。

美国一名男子突然到他当地的加油站买一包香烟 - 却发现他的卡被收取了 23,148,855,308,184,500 美元。

那是 23 万亿美元(14 万亿英镑)——是美国国债的许多倍。*

在十六进制中,它是 $523DC2E199EBB4,乍一看似乎并不十分有趣。

任何人对什么编程错误会导致这种情况有任何想法?

4

7 回答 7

1447

将美分加到数字上,得到 2314885530818450000,十六进制为 2020 2020 2020 1250。

你看到图案了吗?前六个字节已被空格覆盖(十六进制 20,十进制 32)。

于 2009-07-15T19:56:37.203 回答
239

稍等一下; 发生了一些可疑的事情。

虽然空格填充的解释看起来确实不错,但它可能(至少部分)似是而非。

VISA 表示,有“不到 13,000 名”客户受到 Visa Buxx 预付卡的混乱影响。到目前为止,我已经找到了几个新闻。新罕布什尔州的乔什·穆辛斯基,田纳西州的杰森·布莱恩,德克萨斯州的罗恩·西尔,贝塞尔的凯伦·泰勒十几岁的儿子,以及奥瓦通纳的十几岁的女孩伊丽莎白·刘易斯。

问题是所有这些费用都完全相同:23,148,855,308,184,500.00 美元。如果问题出在空间填充上,那么为什么所有这些都具有完全相同的 0x1250 美元(46.88 美元)费用?其中两人在加油站买了烟,另外两人在餐馆付了钱,刘易斯买了鸡蛋和牛奶,最后一个是在药店买的。所有这些不同的项目的成本是否相同?46.88 美元的餐馆账单似乎还可以,但一包香烟呢?牛奶和鸡蛋‽</p>

空格填充错误是有意义的,除了它不考虑 0x1250 常量。为什么最后一个 WORD 中的所有数字都以0x2020 2020 2020 1250而不是0x2020 2020 2020 2020或不同的数字结尾?

嗯,如果只有 13,000 名客户受到影响,那么确切的具体费用可能会以某种方式触发错误。在这种情况下,它不仅仅是一个字段错误。如果只是文本字段被解释为 64 位整数,那么为什么其他数量没有引起它,从而影响到每个人,而不仅仅是 <13,000。不过,为什么13,000人恰好在同一周内收取完全相同的费用?

他们说这是一个“临时编程错误”,很可能是这样,但它会是黑客行为吗?在那种情况下,它可能是一个幻数。事实上,它可能是两者的结合:一些黑客放置了 0x1250 自动收费,与空格填充错误相结合,导致检测到一个或两个错误。

The Register认为答案确实是填充字段错误,但没有详细说明为什么它们都相同,尽管其中一条评论提到这个数字可能四舍五入到最接近的 100 美元(这不太可能,因为银行和银行软件明确地去长度以确保精度)。

(还有一个类似的早期错误的报告。)


杰森布莱恩特的账单:

杰森布莱恩特的账单

伊丽莎白刘易斯的法案:

伊丽莎白刘易斯的账单

罗恩·西尔的账单:

罗恩·西尔的账单

Josh Muszynski 的账单:

乔什·穆辛斯基的账单

于 2009-07-16T17:52:53.147 回答
62

当您通过卡购物时,软件会立即上线以确保您有足够的资金进行购买,但只会保留用于交易的资金。在工作日结束时,软件会收集过去 24 小时内的所有交易,并将其提交给收单银行进行处理。

提交给银行的过程称为结算,它通过以非常严格的格式发送纯文本文件来完成。(这都是几十年前开发的,现在使用它的系统数量使其难以现代化)

每个交易在文件中显示为一行文本,其中一部分是交易价值。此字段应为 11 个数字字符(在左侧填充零),并且将始终保存最小公分母中的值(在本例中为美分)。11 个数字字符可以很好地满足任何货币的值。

看起来这种情况下的支付处理器对其提交软件进行了一些更改,并错误地将零填充替换为空格填充。a) 服务提供商、b) 收单银行和 c) Visa 是如何在没有被取走的情况下获得的,这让我无法理解。该结算文件的净值(13,000 笔高额交易)将是天文数字,也许这在某个地方也是一个促成因素。

于 2009-07-16T14:08:49.760 回答
20

如果您删除尾随零,这将验证为 VISA 卡号。我的猜测是他们刷卡然后手动输入号码,认为刷卡失败了。

于 2009-07-16T03:11:44.113 回答
10

最终的谜团仍然是 12 50 的来源。它们是 Ctrl+R、P 的 ASCII 代码。这恰好是您必须输入的密码才能输入 QuickBooks 的验证代码。

链接:在哪里输入验证码

真是巧合。我想知道当您在错误的位置键入这些键时会发生什么...

于 2010-04-15T02:13:12.033 回答
7

如果将 64 位表示左移 8 位(乘以 256),您将得到一个格式正确的信用卡号和 3 个空位,这 3 个安全的额外数字(由于某种原因全为零)。随机数给出格式良好的 CC 编号的几率只有十分之一。

5926 1069 5889 5232 000

于 2010-04-15T02:42:36.587 回答
6

如果你使用数字 23148855308184500 的二进制等值 (1110101110110100) 解码,你会得到 K 矿,这是采矿和矿石的普通话字符。Kmine 可能意味着“知识矿山”或类似 kmine Holdings Ltd. 的意思。也许 K(矿山或矿石)与美国银行或 Visa 之间存在相关性?

于 2009-07-16T03:17:43.090 回答