创建X509证书方法较多,在Windows 环境下大致总结了几中办法,
1) 通过CA获取证书,
2) 通过微软提供的makecert 工具得到测试证书
3) 编程的方法创建,Net提供了 X509Certificate2 类,该类可以用于创建证书,但只能从RawData中创建,创建后无法修改除FriendlyName以外的任何属性。
我在互联网上找了很久,始终没有找到完全通过程序创建自定义的证书的方法。后来想了一个折中办法,就是用程序调用 makecertexe 先生成一个证书,证书的一些参数如Subject,有效期,序列号等可以通过参数传入,然后把生成的证书文件读到Rawdata中,得到X509Certificate2 类型的证书对象。当然这种方法确实比较笨,必须要依赖外部进程。等后面有时间的话,我还是想按照X509 V3 标准,自己创建RawData,然后生成证书,这样应该是比较灵活的做法。不知道网友们有没有什么更好的方法来创建一个自定义的证书。
通过 makecertexe 创建X509证书的代码如下,供大家参考
static object semObj = new object();
/// <summary>
/// 自定义的证书信息
/// </summary>
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}
/// <summary>
/// 生成X509证书
/// </summary>
/// <param name="makecrtPath">makecert进程的目录</param>
/// <param name="crtPath">证书文件临时目录</param>
/// <param name="certInfo">证书信息</param>
/// <returns></returns>
public static X509Certificate2 CreateCertificate(String makecrtPath, String crtPath,
T_CertInfo certInfo)
{
DebugAssert(certInfo != null);
DebugAssert(certInfoSubject != null);
string MakeCert = makecrtPath + "makecertexe";
string fileName = crtPath + "cer";
string userName = GuidNewGuid()ToString();
StringBuilder arguments = new StringBuilder();
argumentsAppendFormat("-r -n \"{0}\" -ss my -sr currentuser -sky exchange ",
certInfoSubject);
if (certInfoSerialNumber > 0)
{
argumentsAppendFormat("-# {0} ", certInfoSerialNumber);
}
argumentsAppendFormat("-b {0} ", certInfoBeginDateToString(@"MM\/dd\/yyyy"));
argumentsAppendFormat("-e {0} ", certInfoEndDateToString(@"MM\/dd\/yyyy"));
argumentsAppendFormat("\"{0}\"", fileName);
指纹识别技术主要涉及四个功能:读取指纹图象、提取特征、保存数据和比对。
在一开始,通过指纹读取设备读取到人体指纹的图象,取到指纹图象之后,要对原始图象进行初步的处理,使之更清晰。
接下来,指纹辨识软件建立指纹的数字表示——特征数据,一种单方向的转换,可以从指纹转换成特征数据但不能从特征数据转换成为指纹,而两枚不同的指纹不会产生相同的特征数据。软件从指纹上找到被称为“节点”(minutiae)的数据点,也就是那些指纹纹路的分叉、终止或打圈处的坐标位置,这些点同时具有七种以上的唯一性特征。因为通常手指上平均具有70个节点,所以这种方法会产生大约490个数据。
有的算法把节点和方向信息组合产生了更多的数据,这些方向信息表明了各个节点之间的关系,也有的算法还处理整幅指纹图像。总之,这些数据,通常称为模板,保存为1K大小的记录。无论它们是怎样组成的,至今仍然没有一种模板的标准,也没有一种公布的抽象算法,而是各个厂商自行其是。
最后,通过计算机模糊比较的方法,把两个指纹的模板进行比较,计算出它们的相似程度,最终得到两个指纹的匹配结果。
二 取得指纹图象
1取象设备原理
取像设备分成两类:光学、硅晶体传感器和其他。
光学取像设备有最悠久的历史,可以追溯到20世纪70年代。依据的是光的全反射原理(FTIR)。光线照到压有指纹的玻璃表面,反射光线由CCD去获得,反射光的数量依赖于压在玻璃表面指纹的脊和谷的深度和皮肤与玻璃间的油脂。光线经玻璃设到谷后反射到CCD,而设到脊后则不反射到CCD(确切的是脊上的液体反光的)。
由于最近光学设备的革新,极大地降低了设备的体积。最近90年代中期,传感器可以装在6x3x6英寸的盒子里,在不久的将来更小的设备是3x1x1英寸。这些进展取决于多种光学技术的发展而不是FTIR的发展。例如:纤维光被用来捕捉指纹图象。纤维光束垂直射到指纹的表面,他照亮指纹并探测反射光。另一个方案是把含有一微型三棱镜矩阵的表面安装在d性的平面上,当手指压在此表面上时,由于脊和谷的压力不同而改变了微型三棱镜的表面,这些变化通过三棱镜光的反射而反映出来。
应用晶体传感器是最近在市场上才出现的,尽管它在传奇文学作品中已经出现近20年。这些含有微型晶体的平面通过多种技术来绘制指纹图象。电容传感器通过电子度量被设计来捕捉指纹。电容设备能结合大约100,000导体金属阵列的传感器,其外面是绝缘的表面,当用户的手指放在上面时,皮肤组成了电容阵列的另一面。电容器的电容值由于金属间的距离而变化,这里指的是脊(近的)和谷(远的)之间的距离。压感式表面的顶层是具有d性的压感介质材料,他们依照指纹的外表地形(凹凸)转化为相应的电子信号。温度感应传感器被设计为感应压在设备上的脊和远离设备的谷温度的不同。
超声波扫描被认为是指纹取像技术中非常好的一类。很象光学扫描的激光,超声波扫描指纹的表面。紧接着,接收设备获取了其反射信号,测量他的范围,得到脊的深度。不象光学扫描,积累在皮肤上的脏物和油脂对超音速获得的图象影响不大,所以这样的图象是实际脊地形(凹凸)的真实反映。
由于巨大的指纹辨别市场,如果想指纹识别在商业上的巨大成功,三个因素中的两个因素是非常重要的,它们是低价格和紧凑的体积(另外一个是上面谈到的识别率)。90年代初到后期,取像设备的价格已经剧烈的下降,制造商最近又承诺,在最近几年后,又要进行大幅度降价。至于体积,上面已经提到光学传感器的体积从6x3x3英寸降到3x1x1英寸。应用晶体的传感器的体积差不多是这样或者更小。在晶片上,集成电路的技术越来越高(如:数字化电路把指纹信号转化为数字信号强度),系统体积将越来越小,晶体传感器的体积接近与手指大小所需要的体积,其长宽大约是1x1英寸高不到1英寸。
在晶体传感器之前,一些没有用到的机能是局部调整、软件控制、自动获取控制(AGC)技术。对于大多数光学设备,只能通过人工调整来改变图象的质量。然而,晶体传感器提供自动调节象素,行以及局部范围的敏感程度,从而提高图象的质量。AGC在不同的环境下结合反馈的信息产生高质量的图象。例如,一个不清晰(对比度差)的图象,如干燥的指纹,能够被感觉并增强灵敏度,在捕捉的瞬间产生清晰的图象(对比度好);由于提供了局部调整的能力,图象不清晰(对比度差)的区域也能够被检测到(如:手指压得较轻的地方)并在捕捉的瞬间为这些象素提高灵敏度。
光学扫描也有自己的优势。其中之一在较大的模型可以做较大指纹取像区域。而制造较大的应用晶体传感器的指纹取像区域是非常昂贵的,所以应用晶体传感器的指纹取像区域小于1平方英寸,而光学扫描的指纹取像区域等于或大于1平方英寸。然而这个对于较小的光学扫描设备并不是优势。较小的光学扫描也是较小指纹取像区域,这是因为较大的指纹取像区域需要较长的焦点长度,所以要有较大包装,否则如果较大的取像区域使用较小的包装,则光学扫描设备会受到图象边缘线形扭曲的影响。
晶体传感器技术最重要的弱点在于,它们容易受到静电的影响,这使得晶体传感器有时会取不到图象,甚至会被损坏,另外,它们并不象玻璃一样耐磨损,从而影响了使用寿命。
总之,各种技术都具有它们各自的优势,也有各自的缺点。我们在下面给出三种主要技术的比较。
比较项目 光学全反射技术 硅晶体电容传感技术 超声波扫描
体 积 大 小 中
耐 用 性 非常耐用 容易损坏 一般
成像能力 干手指差,但汗多的和稍脏的手指成像模糊 干手指好,但汗多的和稍脏的手指不能成像 非常好
耗 电 较多 较少 较多
成 本 低 低 很高
2 图象增强
刚获得的图象有很多噪音。这主要由于平时的工作和环境引起的,比如,手指被弄脏,手指有刀伤、疤、痕、干燥、湿润或撕破等。图象增强是减弱噪音,增强脊和谷的对比度。想得到比较干净清晰的图象并不是容易的事情。为这个目标而为处理指纹图象所涉及的 *** 作是设计一个适合、匹配的滤镜和恰当的阀值。
指纹还有一些其他的有用的信息。比如:类似于脊的“多余的部分”,即使一些特别的脊不连续,但仍可认为是脊的一部分,从而决定他的走向。我们可以利用这些“多余的信息”。
有很多图象增强的方法。大多数是通过过滤图象与脊局部方向相匹配。图象首先分成几个小区域(窗口),并在每个区域上计算出脊的局部方向来决定方向图。可以由空间域处理,或经过快速2维傅立叶变换后的频域处理来得到每个小窗口上的局部方向。
设计合适的,相匹配的滤镜,使之实用于图象上所有的象素(空间场是其中的一个)。依据每个象素处脊的局部走向,滤镜应增强在同一方向脊的走向,并且在同一位置,减弱任何不同于脊的方向。后者含有横跨脊的噪音,所以其垂直于脊的局部方向上的那些不正确的“桥”会被滤镜过滤掉。所以,合适的、匹配的滤镜可以恰到好处地确定脊局部走向的自身的方向,它应该增强或匹配脊而不是噪音。
图象增强,噪音减弱后,我们准备开始选取一些脊。虽然,在原始灰阶图象中,其强度是不同的而按一定的梯度分布,但它们真实的信息被简单化为二元:脊及其相对的背景。二元 *** 作使一个灰阶图象变成二元图象,图象在强度层次上从原始的256色(8-bits)降为2色(1-bits)。图象二元化后,随后的处理就会比较容易。
二元化的困难在于,并不是所有的指纹图象有相同的阀值,所以一般不采取从单纯的强度入手,而且单一的图象的对照物是变化的,比如,手在中心地带按的比较紧。因此一个叫“局部自适应的阀值(locally adaptive thresholding)”的方法被用来决定局部图象强度的阀值。
在节点提取之前的最后一道工序是“细化(thinning)”。细化是将脊的宽度降为单个象素的宽度。一个好的细化方法是保持原有脊的连续性,降低由于人为因素所造成的影响。人为因素主要是毛刺,带有非常短的分支而被误认为是分叉。认识到合法的和不合法的节点后,在特征提取阶段排除这些节点。
三 指纹识别技术的基本原理
指纹其实是比较复杂的。与人工处理不同,许多生物识别技术公司并不直接存储指纹的图象。多年来在各个公司及其研究机构产生了许多数字化的算法(美国有关法律认为,指纹图象属于个人隐私,因此不能直接存储指纹图象)。但指纹识别算法最终都归结为在指纹图象上找到并比对指纹的特征。
指纹的特征
我们定义了指纹的两类特征来进行指纹的验证:总体特征和局部特征。总体特征是指那些用人眼直接就可以观察到的特征,包括:
基本纹路图案
环型(loop), 弓型(arch), 螺旋型(whorl)。其他的指纹图案都基于这三种基本图案。仅仅依靠图案类型来分辨指纹是远远不够的,这只是一个粗略的分类,但通过分类使得在大数据库中搜寻指纹更为方便。
模式区(Pattern Area)
模式区是指指纹上包括了总体特征的区域,即从模式区就能够分辨出指纹是属于那一种类型的。有的指纹识别算法只使用模式区的数据。 Aetex 的指纹识别算法使用了所取得的完整指纹而不仅仅是模式区进行分析和识别。
核心点(Core Point)
核心点位于指纹纹路的渐进中心,它用于读取指纹和比对指纹时的参考点。
三角点(Delta)
三角点位于从核心点开始的第一个分叉点或者断点、或者两条纹路会聚处、孤立点、折转处,或者指向这些奇异点。三角点提供了指纹纹路的计数和跟踪的开始之处。
式样线( Type Lines)
式样线是在指包围模式区的纹路线开始平行的地方所出现的交叉纹路,式样线通常很短就中断了,但它的外侧线开始连续延伸。
纹数( Ridge Count)
指模式区内指纹纹路的数量。在计算指纹的纹数时,一般先在连接核心点和三角点,这条连线与指纹纹路相交的数量即可认为是指纹的纹数。 局部特征 局部特征是指指纹上的节点。两枚指纹经常会具有相同的总体特征,但它们的局部特征——节点,却不可能完全相同。
节点(Minutia Points)
指纹纹路并不是连续的,平滑笔直的,而是经常出现中断、分叉或打折。这些断点、分叉点和转折点就称为“节点”。就是这些节点提供了指纹唯一性的确认信息。
指纹上的节点有四种不同特性:
1 分类 – 节点有以下几种类型,最典型的是终结点和分叉点
A 终结点(Ending) -- 一条纹路在此终结。
B 分叉点(Bifurcation) -- 一条纹路在此分开成为两条或更多的纹路。
C 分歧点(Ridge Divergence) -- 两条平行的纹路在此分开。
D 孤立点(Dot or Island) -- 一条特别短的纹路,以至于成为一点
E 环点(Enclosure) -- 一条纹路分开成为两条之后,立即有合并成为一条,这样形成的一个小环称为环点
F 短纹(Short Ridge) -- 一端较短但不至于成为一点的纹路,
2 方向(Orientation) -- 节点可以朝着一定的方向。
3 曲率(Curvature) -- 描述纹路方向改变的速度。
4 位置(Position) -- 节点的位置通过(x,y)坐标来描述,可以是绝对的,也可以是相对于三角点或特征点的。
四 系统问题(system issues)
有效的指纹辨识系统不仅仅依赖于辨识算法,还有其他的一些重要因素,这里称之为“系统问题”。包括注册和辨识过程,速度和工作学、用户信息的反馈、排斥欺骗和安全考虑。 为了得到较好的识别率,重要的是在注册时尽量获得最好的指纹图象,这是因为注册一般只进行一次,而以后的辨识是经常的。一个较好的指纹识别系统应要求用户的指纹在登记指纹时多次获取指纹,然后,把最好的指纹或每次获得的指纹的综合的结果作为注册的指纹。
又一个方法可以作为指纹系统设计时的考虑,即我们可以多次取像直到得到一个确定的匹配,但这个过程在降低了拒判率的同时,提高了误判率。辨识不仅仅只用一个手指的指纹,可以用两个或更多的手指的指纹,这样可以增强识别率,当然这样一来会浪费用户的许多时间。
系统的工作学是很重要的。例如:在个人识别系统中,人们愿意等待时间的极限,这个极限时间根据特定的应用而不同,依赖于在处理的过程中人们正在做什么。例如:刷卡或输入ID号的过程,从05-15秒被认为是可接受的时间;另外,拒判而重复次数不应超过3次。
验证和辨识的过程、取像设备的设计拒判率和误判率关系的设定,为了尽可能的获得高质量的指纹图象而提示用户手指该怎样放置,正确的反馈信息是非常有用的。如“手指放得太高”,“手指按得不够重”等。
在指纹识别系统中,反欺骗的措施用来阻止人造指纹、死指纹和残留指纹。残留指纹是由于皮肤油或其他原因残留在传感器上。传感器应建立反欺对策,使得有能力识别真实的皮肤温度、阻力或电容。
既然指纹识别系统是为安全而考虑的,例如,节点模板数据库必须是安全的,以防止一个冒名顶替的人将自己的指纹存进数据库而成为合法的用户。指纹匹配的结果是“YES”或“NO”,以此获得访问权。如果有人简单地绕过指纹匹配而能去直接发送一个“YES”,那么系统就是不安全的。这个问题的解决是确保主机接收的识别结果是来自真正的合法用户,如通过数字信号发送给主机。
总之,在一个完整的指纹识别应用系统中有许多问题值得考虑,解决好这些问题有助于成功地建立有效的系统,相反,则有可能会使得高明的技术被束之高阁,甚至导致应用系统最后的失败。
```JavaScript
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Fingerprint2 TEST</title>
<style>
body {
color: #555;
}
#info {
font-size: 12px;
}
#control span {
color: #333;
margin-left: 10px;
}
</style>
</head>
<body>
<div id="info">
</p>
<p>纯前端实现的浏览器指纹采集器,通过获取浏览器中所有能获取到的信息(部分通过base64转成String),最后生成出md5,用于该用户在该设备上的唯一标识码,官方宣称准确度高达995%</p>
</div>
<div id="control">
<button onclick="start()">开始</button>
<span>userAgent:</span><input type="checkbox" id="userAgent" checked="checked">
<span>fonts:</span><input type="checkbox" id="fonts" checked="checked">
<span>fontsFlash:</span><input type="checkbox" id="fontsFlash" checked="checked">
<span>canvas:</span><input type="checkbox" id="canvas" checked="checked">
<span>webgl:</span><input type="checkbox" id="webgl" checked="checked">
<span>audio:</span><input type="checkbox" id="audio" checked="checked">
<span>enumerateDevices:</span><input type="checkbox" id="enumerateDevices" checked="checked">
</div>
<div id="view">
</div>
<script src=">
以上就是关于如何获取数字证书(x509Certificate)中的指纹算法全部的内容,包括:如何获取数字证书(x509Certificate)中的指纹算法、怎样识别指纹、前端获取浏览器指纹等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)