让我们想象一下,如果你的手机没电了,你要借用下别人的手机来登录某个网站。但是呢,你又不想在别人的手机上输入密码或者进行指纹操作,不想在别人的手机上留下任何信息,万一这个借你手机的人不怀好意怎么办?
当当当当……小编有办法,哈哈✔
不过这里先插播两条新闻
近日
,
北京地铁支持全面刷手机的消息很火热。这意味着北京居民只需要手机具有 NFC 功能且开通手机一卡通,就能用手机刷卡搭乘地铁。出门又可以少带一样东西啦!坏消息是,苹果手机暂时还没法用,因为苹果公司在中国地区尚未向公共交通领域开放 NFC 功能。不过还有一个好消息,就是苹果可能在 iOS11 的版本里面开放NFC。
iOS11 的 NFC 的火热,相信好多人都在等着吧。然后,小伙伴们一起组队去刷 iPhone 公交卡,再也不用嫉妒安卓的小伙伴了
2014 年苹果就已在 iPhone 6 和 iPhone 6 Plus 添加了 NFC 硬件,以支持 Apple Pay 移动支付系统。但是苹果并未对外开放第三方 App 对 iPhone 的 NFC 控制器访问的 SDK。直到 iPhone 7 和 iPhone 7 Plus 才开始支持读取 NFC 的 NDEF 标签。只有能读取 NFC 的 NDEF(数据交换格式)标签,才能实现 NFC 设备之间的通信。因此,即使苹果在 iOS 11 中提供了 Core NFC 给第三方 App 开发者,但是升级 iOS 11 后的设备中也只有 iPhone 7 和 iPhone 7 Plus 能在第三方 App 得到 NFC 的扩展,更老版本的 iPhone 依然只能刷 Apple Pay
2003年
,
比尔·伯尔在为美国政府工作期间,写下了关于密码安全的“圣经”。他建议在密码中使用大写字母、数字和符号,这样密码就比较安全。
正是由于听从了他的建议,公司和网站开始要求人们设置非常复杂的密码,如 ppiyr#101 ,而 IT 部门也会要求员工每90天重置一次密码。事实上是,这些密码并没有如预想的那样安全。
如今已经退休的比尔·伯尔对美国《华尔街日报》说:“我现在对自己此前的大部分工作感到后悔,其实我完全搞错了。”他认为,定期更换密码的建议被误解了,由于大多数人只会换掉其中一个字符,比如把“username1”换成“username2”,这根本防不了黑客。
伯尔撰写的[美国国家科学和技术研究所密码指南]最近经过了修改,新指南建议人们使用长但容易记住的“密词”,不必强调特殊字母或数字。
horsecarrotsaddlestable”(“马胡萝卜马鞍稳定”)这样的密码比“P@55w0rd”要安全多了。
好了,说正事。
假如,你要用别人的手机登录某个网站,嗯,恰好,你需要的信息的那个 app 或者网站,是支持 NFC 登录的,恰好这个手机也支持 NFC 。那么,你只要掏出你的 NFC 物理识别卡,就可以直接登录这个 app,无需输入任何东西。是不是很方便啊~~~
又假如,你是一个运维人员,突然之间,接到了领导的电话,说服务器现在怎么不能访问了,这时候你只需打开手机,将物理卡靠近手机,就能完成服务器的认证,无需记住一大串的不好记的密码,造福了一大堆运维人员呢~~~
这也就是说,只要是需要输入密码的地方,我们都可以使用 NFC 来解决,免去了大家时不时要记住密码的麻烦。
接下来看一下在 iOS11 上,如何实现 NFC 的读写,然后看看 NFC 的读写是否可以用来做更多有趣的事情。
1、Xcode 9 Beta
2、iOS 11 device (iPhone 7 / iPhone 7 Plus)
在项目的 .entitlements 文件中,添加以下的 Key:
com.apple.developer.nfc.readersession.formats
NDEF
然后在苹果开发者网站中的 Provisioning Profile 添加 NFC Capability
import CoreNFC
//新建两个属性,会话和检测到的tag消息
private var nfcSession: NFCNDEFReaderSession!
private var nfcMessages: [[NFCNDEFMessage]] = []
//初始化会话
self.nfcSession = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: false)
//描述NFC相关信息
self.nfcSession.alertMessage = "将NFC卡放在手机背后的顶部中间部分"
extension NFCTableViewController : NFCNDEFReaderSessionDelegate {
func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
print("Error reading NFC: (error.localizedDescription)")
}
func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
print("检测到NFC Tag:")
for message in messages {
for record in message.records {
print("类型格式: (record.typeNameFormat)")
print("内容: (record.payload)")
print("类型: (record.type)")
print("标识: (record.identifier)")
}
}
self.nfcMessages.append(messages)
}
}
检测到NFC Tag:
-
类型格式: NFC Well Known
-
内容:google.com
-
类型: 1 bytes
-
标识:0 bytes