关于IC卡与ID卡的区别

关于ID卡

ID卡属于大家常说的低频卡,一般大部分情况下作为门禁卡或者大部分大学里使用的饭卡,一般为厚一些的卡,是只读的,卡里面只保存有一串唯一的数字序号ID,可以把这串数字理解为你的身份证号,刷卡的时候,读卡器只能读到ID号,然后通过跟后台数据库进行匹配,如果是门禁卡,那么数据库里面就是存在这样的ID号,如果匹配上门就开了,匹配不上门就开不了。

如果是学校的饭卡,刷卡的时候,实际上操作的是你对应ID号相关的数据库中的数据。ID卡本身不存在任何其他数据,所以,学校使用的ID卡饭卡,只能复制卡,刷别人的钱(数据库中的钱),但并没有办法改变账户里的数据。

ID卡的特点

  1. ID卡就是大家常常说的低频卡
  2. 其一般厚度较为厚,并且只是只读,只保存一串唯一身份识别序列号(厚度仅作为参考,也有比较薄的ID卡,如 EM4X、TK4100)
  3. ID卡不存在任何其他的数据

关于高频以及IC卡

高频( 英语:High frequency)是指频带由3MHz到30MHz的无线电波,然而常用的RFID使用的高频频段为13.56MHz

IC卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card)。可读写,容量大,有加密功能,数据记录可靠,使用更方便,如一卡通系统

消费系统、考勤系统等,目前主要有PHILIPS的Mifare系列卡。

其实ID卡本身的设计就存在所谓的芯片,和IC卡并无本质区别。从前我们会讲公用电话或一些银行卡的接触式卡叫“IC卡”,是因为那块裸露的芯片及其金手指。高频卡类似MIFARE CLASSIC存在着其唯一身份识别UID,在很多门禁使用案例当中,也都有很多基于高频频率中的MIFARE CLASSIC作为ID卡来使用,因为也衍生出了很多只有0区(UID部分)的MIFARE CLASSIC。

如何区分

3个能准确分辨ID卡、IC卡的小技巧。

1、卡面的数字

针对白卡或者钥匙扣卡可以观察卡面上的数字来分辨,ID钥匙扣上一般有00开头的10位或8位数字,如00123647或0098764736。白卡是和银行卡大小薄厚差不多,表面没有印刷图案文字的一种卡。ID白卡卡上有00开头的18位数字,如0012345678 123,45678。而IC钥匙扣卡和IC白卡一般没有印刷卡号。

2、内部线圈

分辨印刷卡是ID卡还是IC卡,上述的的办法可能就不管用了。这时候可以通过观察卡内部线圈的形状来进行分辨。在比较黑暗的地方用手电筒照向卡,观察卡片里面的线圈,一般ID卡线圈是圆形的,并且线圈匝数比较多。IC卡线圈是长方形的,匝数比较少。观察线圈的方式有一定的局限性,首先在印刷色彩较深的卡上,很难观察地到线圈。其次圆形线圈是ID卡、方形线圈是IC卡指的都是一般情况,不排除有特殊的定制的线圈。

3、手机NFC功能检测

如果你手机有NFC功能也可以轻易检测出IC卡、ID卡。ID卡和IC卡重要的区别是工作频率的不同,ID卡的工作频率是125KHz,IC卡的工作频率是13.56MHz。手机NFC的工作频率也是13.56MHz,所以手机的NFC功能能感应到IC卡,不能感应到ID卡。

 

关于所谓的UID和CUID卡什么的

UID卡是一种IC卡,其实一堆”id”卡都是IC卡

UID卡可以修改任意扇区,作为M1复制的子卡,主要应用在IC卡复制上。该卡片完全兼容mifare 1k卡片。卡片的block0(UID所在的block)可以任意修改,重复修改。

UID卡适用于:一卡通、门禁、停车场、自动贩卖机、电子钱包、电子商务、身份验证等多个领域,在住宅小区、写字楼、工厂、学校、医院等各行业中的非接触式IC卡应用。

 

普通IC卡,0扇区不可以修改,其他扇区可反复擦写,我们使用的电梯卡、门禁卡等智能卡发卡商所使用的都是 M1 卡,可以理解为物业发的原卡。

UID 卡
普通复制卡,可以重复擦写所有扇区,主要应用在IC卡复制上,遇到带有防火墙的读卡器就会失效。

CUID 卡
可擦写防屏蔽卡,可以重复擦写所有扇区,UID卡复制无效的情况下使用,可以绕过防火墙。

FUID 卡
不可擦写防屏蔽卡,此卡的特点0扇区只能写入一次,写入一次变成 M1 卡,CUID 复制没用的情况下使用,可以绕过防火墙。

UFUID 卡
高级复制卡,我们就理解为是 UID 和 FUID 的合成卡,需要封卡操作,不封卡就是 UID 卡,封卡后就变为 M1 卡。

 

又是忙乱的一天

昨晚几乎没睡觉,还是失眠问题。

早上到公司,上来就继续安装mediawiki,但是安装好之后发现实在不好用。

特殊页面有一整页,整体概念和dokuwiki差不多,但是复杂度比dokuwiki要高,而功能其实更加简陋,唯一优势是默认界面看起来比较漂亮。

最后终于决定还是弄dokuwiki,但没想到复制原来安装好的版本其实并不可行。

虽然这个东东没用数据库,可它还是需要安装的。

各种插件走起来。

其他的都一样,就是在Nginx下权限控制有问题。

然后中间几次开会听人讲公司业务。

细节都不记得,观其大概吧。

当初和某人从0开始搞一个公司,也算百分百的元老,但是真的忍不了他们在工具上搞七搞八,不知道多少时间都浪费上在这些工具上,所以有些事情不愿意参与。后来果然是项目管理工具都换了几茬,文档工具换了几茬,各种任务管理、流程管理也换了几茬,代码却是稀烂,产品更是更新慢,当然表面上功夫到位,花几个月时间搞个新版,就是弄个新界面,功能没加几个,而且学卡慢死,客户最大的需求没人理……

为什么我又要吐槽呢。

 

现在想用禅道,几年没用禅道了,现在居然已经不记得怎么用了。关于禅道中产品与项目的关系,这个解释得比较清楚。

https://www.jianshu.com/p/24e240373b6d

这一天过得真是充实且枯燥

早上有个事,要通过手机上传几个资料的照片。

结果这页面里每个输入项的标题都显示不全(全是省略号)。

折腾了半天,最后弄到一个表格,方知这省略号后是什么东东。

下午为了搞wiki,买了一台新的vps。

买完安装lnmp好一阵折腾。

目的是为了安装那个啥mediawiki,结果设置好vhost之后死也无法访问,以为是阿里云的安全组策略错了,搞到下班之后,在地铁里突然想到,也许是域名没备案导致的。

果然,那些域名既没有备案也没有认证。

好吧,我先不理这个事,先用ip再说。

谁知配置好ip访问之后,又提示说php版本不够高,悔不当初啊,为了兼容一些老程序,故意选择缺省设置。

好吧,那就升级php,结果升级完就502了。

办法是什么呢,它有一个oldphpxxx的文件夹,这是备份啊。

把这个文件夹名称改成php,然后再次升级,居然就升级成功了。

这回不再说php版本不够了,但是又说缺少依赖,具体缺少哪些依赖它也不提,就说建议用composer之类的东西去安装。

好吧,这composer咱这里也没有啊,又要研究安装composer。

 

用tasker玩转手机ftp服务

这篇文章玩tasker玩出了花,作者不可考,收藏如下:

最近想实现一个功能:在笔记本上贴一个NFC标签,当把手机放上去的时候,手机内置的EStrong File Explorer ftp服务自动启动,这样通过笔记本电脑就可以访问手机的文件,当把手机拿开,自动关闭手机ftp服务。

研究了一下 Tasker 的Send Intent功能,以及EStrong File Explorer 反编译后的代码,发现了一些规律,于是决定试试,成功。
[size=13.63636302947998px]
Use task “Send Intent[size=13.63636302947998px]” to start/stop ES File Explorer ftp:

[size=13.63636302947998px]1、StartESFtp
[size=13.63636302947998px]Tasks->New Task(“StartESFtp”)->Add Action->Misc->Send Intent->
[size=13.63636302947998px]Action: android.intent.action.MAIN
[size=13.63636302947998px]Package: com.estrongs.android.pop
[size=13.63636302947998px]Class: com.estrongs.android.pop.ftp.ESFtpShortcut
[size=13.63636302947998px]Target: Activity
[size=13.63636302947998px]2、StopESFtp
[size=13.63636302947998px]Tasks->New Task(“StopESFtp”)->Add Action->Misc->Send Intent->
[size=13.63636302947998px]Action: android.intent.action.MAIN
[size=13.63636302947998px]Extra1: mode:2
[size=13.63636302947998px]Package: com.estrongs.android.pop
[size=13.63636302947998px]Class: com.estrongs.android.pop.ftp.ESFtpShortcut
[size=13.63636302947998px]Target: Activity

研究过程如下:
1、apktool 反编译 ESFileExplorer.apk
得到AndroidManifest.xml如下:
<?xml version=”1.0″ encoding=”utf-8″?>
<manifest android:versionCode=”103″ android:versionName=”1.6.2.5″ android:installLocation=”auto” package=”com.estrongs.android.pop”


<service android:name=”.ftp.ESFtpService” android:exported=”false” />
<activity android:theme=”@style/Transparent” android:label=”@string/app_name” android:name=”.ftp.ESFtpShortcut” android:launchMode=”singleTop” android:configChanges=”keyboardHidden|orientation”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
</intent-filter>
</activity>

从以上内容可以分析得到几个参数:
Action:  android.intent.action.MAIN
Package: com.estrongs.android.pop
Class: com.estrongs.android.pop.ftp.ESFtpShortcut
于是尝试使用以上内容作为参数,调用Tasker的Send Intent,结果发现可以成功启动 ES ftp!!

2、如何停止ftp呢?
研究com.estrongs.android.pop.ftp.ESFtpShortcut反编译得到的java代码和smali代码。
java代码:
public class ESFtpShortcut extends ESActivity
{
protected void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
int i = 1;
Bundle localBundle = getIntent().getExtras();
if (localBundle != null)
i = localBundle.getInt(“mode”);
try
{
l locall = l.a();
locall.a(this, new k(this, i, locall));
finish();
return;
}
catch (Exception localException)
{
while (true)
localException.printStackTrace();
}
}
}

发现Extra属性里有一个参数”mode”:
int i = 1;
Bundle localBundle = getIntent().getExtras();
if (localBundle != null)
i = localBundle.getInt(“mode”);
并且缺省值是1
int i = 1
推测mode=1表示启动ftp服务,如果mode=0呢?尝试了一下,没能够停止ftp服务。于是继续看用到这个参数i的地方:
locall.a(this, new k(this, i, locall));
看看k这个类是什么内容:
class k
implements n
{
k(ESFtpShortcut paramESFtpShortcut, int paramInt, l paraml)
{
}

public void a()
{
while (true)
{
try
{
if (this.b == 1)
{

Intent localIntent = new Intent(this.a, ESFtpService.class);
this.a.startService(localIntent);

}
}
}
catch (Exception localException)
{
localException.printStackTrace();
}
if (this.b == 2)
this.c.c();
else if (this.b == 3)
this.c.e();
else if (this.b == 4)
this.c.f();
}
}
}

this.b是什么玩意?这个反编译出来的java代码质量很差,没有反映出b变量是哪里来的,但是可以初步推断应该是和Extra的mode参数有关。因为b==1的时候startService,进一步查看smali代码:

# instance fields
.field final synthetic a:Lcom/estrongs/android/pop/ftp/ESFtpShortcut;

.field private final synthetic b:I

.field private final synthetic c:Lcom/estrongs/android/pop/ftp/l;

# direct methods
.method constructor <init>(Lcom/estrongs/android/pop/ftp/ESFtpShortcut;ILcom/estrongs/android/pop/ftp/l;)V
.locals 0

iput-object p1, p0, Lcom/estrongs/android/pop/ftp/k;->a:Lcom/estrongs/android/pop/ftp/ESFtpShortcut;

iput p2, p0, Lcom/estrongs/android/pop/ftp/k;->b:I

iput-object p3, p0, Lcom/estrongs/android/pop/ftp/k;->c:Lcom/estrongs/android/pop/ftp/l;

invoke-direct {p0}, Ljava/lang/Object;-><init>()V

return-void
.end method

可以看到,b就是k的构造函数的第二个参数(p0==对象本身即this, p1为第一个参数,p2为第二个参数,p3为第三个参数) 。参照前面对k构造函数的调用:locall.a(this, new k(this, i, locall));
因此可以确定 b–>i–>Extra(“mode”)
于是决定将2、3、4分别代入mode中进行尝试,幸运的是,刚尝试了mode=2就成功停止了ES ftp!!

当然,还有个更牛逼的哥们,写了篇英文文章,用bing搜索,发现应该还真是他原创,帖链接在此

Tasker to create toggle widget for ES ftp service — Send Intent

只可惜,据此操作,并不成功,不知道是不是ES现在改了还是怎么的。

搞定了owncloud以及HTTPS的问题

其实还可以选nextcloud\seafile之类,后者还能支持分布式存储。

怕选择困难症,所以很快就定下来用owncloud,其中主要原因是它提供中文界面。

我本不需要,但如果要方便他人,必须有这个。

暂时不靠它存大文件,主要就是文档存储吧。

yum里有安装源,不过就是下载一堆PHP代码回来而已。

我一开始以为它安到哪里我就必须在哪里用,但发现apache的配置太麻烦,于是自作主张把它移到“合法”的位置,结果发现没问题,这就证明确实是一堆PHP页面没有其他的东西。就算有,其位置也不影响吧。

改了apache的配置之后,遇到几次权限问题。

其中有一个.ocdata的隐藏文件,死也搞不定。后来怀疑是owner的组有问题,照网上的脚本去设置,结果遇到脚本本身的问题,复制下来的脚本代码linux居然不认?仔细看报错,到处都是\r,想来应该是windows下的文本自带了不兼容linux的换行吧。

好吧,全部替换,第一次可行,可是配置不对,第二次又不可行了。后来想想不就是脚本吗?我就手动改好了。手动改掉了owner的group,这个group得是apache的拥有者。后来查了一下apache的进程信息,得到了真正有效的group,用命令改过果然就好了(用winscp是改不了的)。

这个owncloud也是讨嫌,官网不留APP下载地址,只留个google市场的地址。

在国内的安卓市场找到的版本过低,居然只能上传不能下载,也看不到远程的文件。后来到bing.com里下载到了新版本的安卓APP,用起来感觉还算好。

然后接下来发现不用https就不能分享文件。

好我继续搞https,之前有几个证书都过期了,更好理一理。

首先第一个问题,去年第一次过期的时候,把其中一个证书(第2个小程序的证书)给直接装到服务器里了,没有再走那个所谓的负载均衡,那么这个证书必须下载下来放到特定文件夹里,然后配合apache的配置文件来使用。更新完了之后果然好了。

第二个问题是最早那个小程序的证书问题,那个证书不需要自己折腾,直接部署到负载均衡上就行,可问题是以前行,现在不行了,折腾了老半天终于明白是监听器里没有绑定证书。也就是说不但证书要绑到负载均衡上,负载均衡的监听器也要绑证书。由此可知,一个负载均衡绑两个证书也是可以的,只要弄两个监听器就好了?不过既然之前已经自己在服务器上完成了https,那就不折腾了。

弄完证书之后,发现派的域名本身是没有https的,只好换一个有https的域名来访问,但这也不是访问的问题,还要修改config,而且是两条语句,修改完了之后就好了。

然而装到最后,突然想到自己的空间有限,搞这个也就是放放文档吧,如果改用seafile,还能玩分布式,凑一下应该挺好的。以后再说吧。

昨夜做了一个大片梦

一堆游客到一个不知是真实还是虚拟的游乐园中玩。
里面危机重重,我根本分不清楚到底是真的是假的。
这些游客在不同的仓库中,但又好像仓库只是避难所,外面像侏罗纪公园一样,非常蛮荒。可怕的异型、各种高科技武器层出不穷。它们有时候会攻破仓库。
游客也会跑到仓库外面去。
但仓库和仓库外面的世界有可能都是虚拟的,即使在梦中也可以意识到这一点。
因为人们并不会真正的受伤。
有一个男人似乎是控制这个地方的人。
我不知道他是控制这个虚拟世界的,还是控制每个人所见所感的。
游客似乎都要穿着一些设备,可能是这些设备影响了他们的感观。
这些设备也会直接链接到控制者那里。
控制者可以帮助游客避开真正的危险。
非常奇怪的设定。

批量

原代码:
function updatePlayerSetting(jumpUrl){
var val=$("input[name='mode']:checked").val();
var valnew = $("#playmode").val();
if(val==5 || valnew == 5){
if($(".custom-player-list .current").length==0 && $(".terminals_mode").length==0){
$("#dialog_vod_tip").dialog({close:function(){}});
countDown("请选择播放器!",3,function(){
$("#dialog_vod_tip").dialog("close");
$("#dialog_vod_tip").dialog({
close: function(event, ui) {
window.clearInterval(intervalFinal);
$("#close_tip").unbind();
refreshDocument();
}
});
},'')
$("#dialog_vod_tip").dialog("open");
return;
}
}
if($("#edit_playsetting_info" ).valid()){
$.ajax({type: 'POST',url:'/training/site/admin/course/vod/updatesetting',data:$("#edit_playsetting_info").serialize(),success:function(result){
var tipInfo="修改失败!"
if(result.indexOf("success")==0){
tipInfo="修改成功!"
}
closeDialog();
$("#dialog_vod_tip").dialog("open");
countDown(tipInfo,5,function(){
$("#dialog_vod_tip").dialog("close");
},'');
}});
}
}

新的代码

http://exzbo.gensee.com/training/site/admin/course/vod/updatesetting

if($("#edit_playsetting_info" ).valid()){
$.ajax({type: 'POST',url:'/training/site/admin/course/vod/updatesetting',data:$("#edit_playsetting_info").serialize(),success:function(result){
var tipInfo="修改失败!"
if(result.indexOf("success")==0){
tipInfo="修改成功!"
}
console.log(tipInfo);
},'');
}});
}