RFID为啥不可复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RFID为啥不可复制相关的知识,希望对你有一定的参考价值。

我不同意楼上的发言,关于“13.56mhz HF 市场上常见的产品已经被破解,可以全面复制”,这个观点是部分正确、整体错误。
13.56MHz分为ISO15693 和ISO14443两个标准,被破解的是ISO14443,而不是前者。 当然作者应该不是不知道这个,也许只是为了简化措辞。

我本人是专业做ISO15693标准的高频RFID的,觉得有必要特别澄清一下该问题。

至于“RFID为什么不可复制”,如同楼上两位的回答,有些RFID是可以复制的,而不可复制的RFID主要是靠全球唯一的UID号码。这是一个游戏规则,正规的芯片工厂不会去打破这个规则。
参考技术A 不明白你说的是那种RFID,它分为125、13.56、433、900、2.45、5.8
举两个例子来解答你的问题
1.13.56mhz HF 市场上常见的产品已经被破解,可以全面复制,所以国家已经下文在今后的国家建设重大项目中禁止使用,当然,身份证还没有被破解。

2.900MHZ UHF产品,使用最多的G2协议的标签,这分为两块来说,一个是epc码,一个是uid码,这两个码当中,EPC码是可以修改的,但UID码是不可以修改,以目前的市场上应用情况来看,使用EPC码的还是居多,所以在某种意义上来说也是可以复制的。
参考技术B RFID的设计的目的之一就是防伪 当然不能随意复制 如果你是想伪造 那你要做的事情可就多了

为啥 BitSet 不可迭代?

【中文标题】为啥 BitSet 不可迭代?【英文标题】:Why is BitSet not Iterable?为什么 BitSet 不可迭代? 【发布时间】:2017-06-09 20:24:15 【问题描述】:

BitSet 有一个stream() 方法,但它不像提供此方法的其他类型那样实现Iterable 接口。这有什么具体原因吗?

【问题讨论】:

【参考方案1】:

BitSet 中没有提供Iterableforeachiteratorspliterator)中的任何方法。 Iterable 中没有 stream() 方法。

此外,BitSetstream() 方法不会在位集的位上返回流,而是在 其值已设置的位的索引上返回流(即有点令人困惑的TBH)。因此,从技术上讲,这似乎与Iterable 几乎没有任何共同之处。

【讨论】:

【参考方案2】:

一个原因(也许不是全部原因)是Iterable 效率低,因为位索引必须被装箱(*);流能够使用原始整数。

如 Javadoc 中所述,有一种无需使用 Iterable 即可迭代 bitset 的有效方法,因此实际上没有必要。


(*) 但是,对于大小为 128 或更小的位集,装箱会很便宜,因为会使用缓存的装箱实例。

【讨论】:

【参考方案3】:

BitSet 不是 java 集合框架的“真正”成员,所以从技术上讲,不需要实现 Collection.iterator() 并提供一个。

public class BitSet implements Cloneable, java.io.Serializable 

更重要的是,两者都不合适。

BitSet 不是 generic,不像 java.util.Iterator;与 Iterator 不同,BitSet 提供了具有特殊功能的 ad-hoc 方法来处理副作用和随机寻址。

【讨论】:

【参考方案4】:

可能是为了避免将每一位都昂贵地装箱到Boolean 实例。

使用它自己的 API 循环遍历它会避免所有分配。

【讨论】:

我猜可能是一个原始的简短 @fabienbk:不; Java 不支持原始泛型。 装箱到布尔值真的很便宜:只有两个,而且它们被缓存了。 stream 返回代表设置位索引的ints;我认为 OP 期望 Iterable 做同样的事情(Integer 除外)。 哎呀,你是对的。绝对是主要原因。 “有点被遗弃的课程”需要引用。根据我的经验,它并没有被放弃,而是仅用于特定的应用程序。

以上是关于RFID为啥不可复制的主要内容,如果未能解决你的问题,请参考以下文章

为啥“模块”对象不可调用? [复制]

为啥 c++ 线程是可移动的但不可复制的?

如果 lambda 使用 std::move() 捕获不可复制的对象,为啥它是不可移动的?

为啥 C++11 不能将不可复制的仿函数移动到 std::function?

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

门禁卡解密为啥要很久