首页> 中国专利> 一种动态创建并使用功能对象的方法

一种动态创建并使用功能对象的方法

摘要

本发明公开了一种动态创建并使用功能对象的方法,涉及通信领域。该方法包括:当中间件监控到有卡片插入时,获取该卡片所支持的算法数据,在内存中构建生成一张与所述卡片对应的算法映射表,中间件根据获取的所述算法数据创建功能对象,并将创建好的功能对象更新到内存中与当前卡片对应的算法映射表中,即将算法映射表中的软算法对象更新为硬算法对象;当中间件被上层应用程序调用访问卡片时,中间件从当前卡片对应的算法映射表中获取算法对象,根据密钥对象和算法对象对待处理数据执行相应操作;当中间件监控到所述卡片拔出时,中间件自动销毁内存中与所述卡片对应的算法映射表。

著录项

  • 公开/公告号CN103544011A

    专利类型发明专利

  • 公开/公告日2014-01-29

    原文格式PDF

  • 申请/专利权人 飞天诚信科技股份有限公司;

    申请/专利号CN201310493406.3

  • 发明设计人 陆舟;于华章;

    申请日2013-10-21

  • 分类号G06F9/44(20060101);G06K7/00(20060101);H04L29/06(20060101);

  • 代理机构

  • 代理人

  • 地址 100085 北京市海淀区学清路9号汇智大厦B楼17层

  • 入库时间 2024-02-19 21:57:24

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-10-27

    未缴年费专利权终止 IPC(主分类):G06F 9/44 专利号:ZL2013104934063 申请日:20131021 授权公告日:20160525

    专利权的终止

  • 2016-05-25

    授权

    授权

  • 2014-03-12

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20131021

    实质审查的生效

  • 2014-01-29

    公开

    公开

说明书

技术领域

本发明涉及通信领域,具体涉及一种中间件动态创建并使用功能对象的方 法。

背景技术

The Public-Key Cryptography Standards(PKCS)是由美国RSA数据安全公 司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、 证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系 列相关协议。PKCS#11称为Cyptoki,定义了应用程序与各种各样的便携式密码 设备(基于智能卡、PCMCIA卡以及智能软盘)间的一种接口。

CryptoAPI(一个应用程序编程接口)就是提供开发者在Windows下使用PKI 的编程接口。CryptoAPI提供了很多函数,包括编码、解码、加密、解密、哈希、 数字证书、证书管理和证书存储等功能。对于加密和解密,CryptoAPI同时提供 基于会话密钥和公钥/私钥对的方法。

现有技术中,为了保证设备与应用程序之间的通信安全,应用程序通过中 间件访问设备对通信数据进行加解密或签名等操作,中间件中的算法和密钥是 预先绑定好的,如果设备内置算法有改动,比如增加了一种硬算法,中间件不 能灵活的做出调整,这样中间件每次访问设备时只能直接调用预先绑定好的算 法和密钥执行相应操作,这种方法的缺陷是密钥仅对应一种算法造成资源的浪 费。

发明内容

本发明为解决现有技术中存在的上述问题,提出了一种动态创建并使用功 能对象的方法。

本发明采取的技术方案是:一种动态创建并使用功能对象的方法,包括:

当中间件监控到有卡片插入时,执行步骤S1-S5,

步骤S1:中间件接收卡片应答信息;

步骤S2:中间件判断卡片的类型是否为所支持的类型,是则执行步骤S3, 否则结束操作;

步骤S3:中间件向卡片下发查询所支持的算法数据指令并接收卡片返回的 应答信息;

步骤S4:中间件从所述应答信息中获取卡片所支持的算法数据,并在内存 中构建生成一张与所述卡片对应的算法映射表;

所述构建生成的算法映射表中包含的是软算法和软算法对象,所述软算法 和所述软算法对象一一对应;

步骤S5:中间件根据获取的所述算法数据创建功能对象,并用创建的所述 功能对象更新所述算法映射表中的软算法对象;

更新后的所述算法映射表中包含的是软算法和硬算法对象,所述软算法和 所述硬算法对象一一对应;

当中间件被上层应用程序调用访问所述卡片时,执行步骤S6-S10,

步骤S6:中间件接收到上层应用程序要执行的具体操作指令,中间件根据 所述具体操作指令得到预设算法、密钥对象和待处理数据;

步骤S7:中间件从内存中获取一张与所述卡片匹配的算法映射表;

步骤S8:中间件在所述算法映射表中查找是否存在与所述预设算法匹配的 软算法,若存在则执行步骤S9,否则向上层应用程序返回错误;

步骤S9:中间件获取所述算法映射表中与所述软算法对应的算法对象;

步骤S10:中间件根据所述密钥对象和所述算法对象对所述待处理数据执行 相应操作;

当中间件监控到所述卡片拔出时,自动销毁内存中与所述卡片对应的所述 算法映射表。

上述步骤S2具体为,

第一步:中间件将接收到的所述卡片应答信息的长度与内部定义的所有产 品应答信息分别进行长度匹配,如果全部不相等,则所述卡片为中间件所不支 持的类型,如果存在相等则记录长度匹配的产品应答信息并继续下一步;

第二步:中间件将接收到的所述卡片应答信息的第12、13字节上的数据分 别与0x00做与运算,其余字节数据分别与0xFF做与运算,并用与运算结果替 换原所述卡片应答信息的相应字节上的数据,得到运算后的卡片应答信息;

第三步:中间件将记录的所述长度匹配的产品应答信息与所述运算后的卡 片应答信息做比较,如果不相等,则所述卡片为中间件所不支持的类型,如果 相等,则所述卡片为中间件所支持的类型。

上述步骤S3还包括,中间件判断接收到的所述应答信息中是否包含预设状 态码字节,是则执行步骤S4,否则结束操作。

所述算法数据包含有算法的数目以及多组算法的信息,所述算法的信息包 括算法名称、密钥最小长度、密钥最大长度和算法标志位。

所述步骤S4中所述中间件从所述应答信息中获取卡片所支持的算法数据具 体为:

中间件根据所述应答信息的前两个字节得到卡片所支持的算法的数目,根 据预设结构将所述应答信息的其余字节分解成个数等于卡片所支持的算法的数 目个单元结构体,中间件对每个单元结构体进行解析,获取多组算法的信息, 所述预设结构为长度为12个字节的数据,其中前4个字节用于表示算法名称, 第5和第6个字节用于表示密钥最小长度、第7和第8个字节用于表示密钥最 大长度,第9到底12个字节用于表示算法标志位。

所述步骤S5中所述中间件根据获取的所述算法数据创建功能对象具体为, 中间件根据所述算法数据获取算法类,所述算法类包含有指向算法类的构造函 数的指针,中间件调用所述构造函数的指针创建功能对象。

本发明中具体的,所述中间件通过枚举操作系统中的读卡器监控是否有卡 片插入,当中间件监控到有卡片插入时,且所述卡片是中间件所支持的类型时, 中间件记录枚举到的与所述卡片对应的读卡器,当中间件监控到所述卡片拔出 时,将产生拔出事件的读卡器和已做记录的所有读卡器逐一进行比较,如果比 较成功,则自动销毁内存中与所述卡片对应的所述算法映射表,如果比较不成 功则不作处理。

上述具体操作指令为加解密操作指令或签名操作指令。当所述具体操作指 令为加解密操作指令时,所述算法对象包含实现加解密的操作方式,当所述具 体操作指令为签名操作指令时,所述算法对象包含实现签名的操作方式。

当所述具体操作指令为加解密操作指令,且所述算法对象是软算法对象时, 所述软算法对象包含调用openssl接口实现加解密的操作方式;当所述具体操 作指令为加解密操作指令,且所述算法对象是硬算法对象时,所述硬算法对象 包含向卡片发送APDU指令实现加解密的操作方式。

本发明的有益效果是:通过采用本发明提出的方法,可以实现中间件为当 前要操作的硬件设备(例如卡片)动态创建算法映设表,当中间件访问硬件设 备做具体操作应用时从动态创建的算法映设表中获取对应算法对象,与传统的 预置一张绑定好的算法映射表,每次访问设备时只能直接调用预先绑定好的算 法相比,本发明可以达到灵活应用的效果。

附图说明

图1是实施例1中的中间件动态创建并使用功能对象的方法流程图;

图2是实施例1中的中间件被上层应用程序调用访问卡片做具体操作时的 方法流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式做进一步详细描述。

实施例1

本实施例提出的一种动态创建并使用功能对象的方法,如图1所示,包括 以下步骤:

步骤101:中间件监控到有卡片插入,接收卡片应答信息;

具体的,中间件不停枚举操作系统中的读卡器(Reader),中间件会向读卡 器(Reader)发送获取卡片ATR指令,当有卡片插入时,读卡器将卡片应答信息 (ATR)返回给中间件。

步骤102:中间件判断卡片的类型是否为所支持的类型,是则执行下一步, 否则结束操作;

具体的,中间件根据接收到的卡片ATR来判断卡片的类型,一般的卡片ATR 是由若干字节组成,其中有部分字节是可变的。

本实施例中,中间件判断卡片的类型是否为所支持的类型具体包括:

步骤102-1:中间件将获取的卡片ATR的长度与内部定义的所有产品ATR长 度做比较,如果不相等,则不识别当前的卡片,如果相等则记录比较得到的长 度匹配的产品ATR并继续下一步;

步骤102-2:中间件将获取的卡片ATR的第12、13字节上的数据分别与0x00 做与运算,其余字节数据分别与0xFF做与运算,并用与运算结果替换原卡片ATR 的相应字节上的数据,得到运算后的卡片ATR;

例如,中间件获取的卡片ATR为:

0x3B,0x9F,0x95,0x81,0x31,0xFE,0x9F,0x00,0x66,0x46,0x53,0x05,0x10 ,0x00,0x11,0x71,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,其中的第12、13字 节代表版本号,则将第12、13字节0x05,0x10分别和0x00做与运算,其余字 节分别和0xFF做与运算,得到运算后的卡片ATR为:

0x3B,0x9F,0x95,0x81,0x31,0xFE,0x9F,0x00,0x66,0x46,0x53,0x00,0x00,0x0 0,0x11,0x71,0xDF,0x00,0x00,0x00,0x00,0x00,0x00。

步骤102-3:中间件将记录的长度匹配的产品ATR与运算后的卡片ATR做比 较,如果不相等,则不识别当前的卡片,如果相等则识别当前的卡片,即当前 卡片为中间件所支持的类型,并记录当前卡片对应的读卡器(Reader)。

步骤103:中间件向卡片下发查询所支持的算法数据指令;

具体地,在本实施例中,中间件向卡片发送查询算法指令,这条指令是标 准的APUD指令,其中INS、P2参数是可更改的,本实施例中优选地,INS=0xCA, P2=0x85。

步骤104:中间件接收卡片返回的应答信息,判断所述应答信息中是否包含 预设状态码字节,是则继续下一步,否则结束操作;

具体地,所述预设状态码字节“9000”。

步骤105:中间件从应答信息中获取卡片所支持的算法数据,并在内存中构 建生成一张与卡片对应的算法映射表;

具体地,算法数据包含有算法的数目以及多组算法的信息。

所述算法的信息包括算法名称、密钥最小长度、密钥最大长度和算法标志 位,本步骤构建生成的所述算法映射表中包含的是软算法和软算法对象,所述 软算法和所述软算法对象一一对应。

所述中间件从接收到的所述应答信息中获取卡片所支持的算法数据的过程 具体包括:

步骤105-1:中间件根据所述应答信息的前两个字节得到卡片所支持的算法 的数目,根据预设结构将应答信息的其余字节分解成个数等于卡片所支持的算 法的数目个单元结构体。

步骤105-2:中间件对每个单元结构体进行解析,获取多组算法的信息。

具体的:将每个单元结构体前4个字节解析为算法名称,所述算法名称包 括DES的ECB算法(CKM_DES_ECB)、DES的CBC算法(CKM_DES_CBC)、产生RSA 密钥对算法(CKM_RSA_PKCS_KEY_PAIR_GEN)等,第5至第6个字节解析为算法 密钥最小长度,第7至第8个字节解析为算法密钥最大长度,以算法名为 CKM_RSA_PKCS_KEY_PAIR_GEN为例,其密钥最小长度为512位,密钥最大长度为 2048位,第9至第12个字节解析为算法标志位,中间件根据算法标志位得到算 法支持的功能,比如:加密(CKF_ENCRYPT)、解密(CKF_DECRYPT)、签名 (CKF_SIGN)、验签(CKF_VERIFY)、哈希(CKF_DIGEST)、硬件支持算法(CKF_HW) 等。所述算法标志位也可以用于表示多个功能的组合,例如可以表示加密 (CKF_ENCRYPT)、签名(CKF_SIGN)和硬件支持算法(CKF_HW)的组合。

步骤106:中间件根据获取的所述算法数据创建功能对象;

本实施例中具体为,中间件根据所述算法数据获取算法类,所述算法类包 含有指向算法类的构造函数的指针,中间件调用所述构造函数的指针完成创建 功能对象。

所述算法数据中的算法名称与算法类的对应关系是预先在中间件中规定好 的,例如,CKM_DES_ECB算法对应的算法类为DESECBHardEnc和DESECBHardDec, CKM_GENERIC_SECRET_KEY_GEN算法对应的算法类为GenerateKeyGenericHard。 本实施例中根据中间件中预先规定好的上述对应关系,通过本步骤为算法数据 中的所有算法分别创建算法对象。

步骤107:中间件将创建好的功能对象更新到内存中与当前卡片对应的算法 映射表中。

具体的,用创建好的的功能对象更新所述算法映射表中的软算法对象。更 新后的所述算法映射表中包含的是软算法和硬算法对象,所述软算法和所述硬 算法对象一一对应,即创建的所述功能对象优选的理解为所述硬算法对象。

本实施例中具体地,更新之前的算法映射表中包含有软算法和软算法对象, 所述软算法和软算法对象一一对应。中间件针对每一张卡片,在内存中有一张 与其对应的算法映射表,现有技术中当卡片升级支持新的算法时,因为在中间 件中是预先写好的卡片支持哪些算法的,所以导致中间件无法访问升级后的卡 片;本发明通过上述步骤103-107中间件为监控到的当前卡片在内存中创建预 设算法映射表,并用动态的为当前卡片创建的硬算法对象更新预设算法映射表 中的软算法对象,以便中间件在被上层应用程序调用访问卡片时可以实现从动 态创建的算法映射表中调用所需算法对象,使得达到中间件的应用更加灵活的 效果。

上述步骤107可以具体为,中间件在算法映射表中查找与获取的所述算法 数据中的算法的信息相同的软算法,若查找到,则将与所述软算法对应的软算 法对象更新为所述创建好的功能对象,若未查找到,则所述软算法对应的软算 法对象不发生改变。

所述中间件在算法映射表中查找与获取的所述算法数据中的算法的信息相 同的软算法具体为,查找与获取的所述算法数据中的算法的信息的单元结构体 格式完全相同的软算法。

本实施例中所述动态创建算法对象具体为中间件根据监控到的当前插入的 卡片,动态的更新当前卡片对应的内存中的算法映射表中的算法对象,并且当 卡片拔出时及时销毁当前卡片对应的算法映射表。比如卡片A插入,中间件监 控到并识别,给卡片A下发查询所支持的算法数据指令,中间件获得算法数据, 创建算法对象,构建卡片A的算法映射表,例如卡片A支持的RSA密钥对最小 长度为512位,最大长度为2048位,卡片A不支持SHA1硬HASH算法;此时卡 片B插入,中间件监控并识别,中间件给卡片B下发查询所支持的算法数据指 令并构建卡片B的算法映射表,而卡片B支持的RSA密钥对最小长度为1024位, 最大长度为2048位,并支持SHA1的硬HASH算法。这样当中间件监控到有多张 卡片插入时,可以在内存构建生成与卡片对应的多张不同的算法映射表,以便 中间件在被上层应用程序调用访问卡片时灵活的从动态创建的算法映射表中调 用所需算法对象。进一步的,如果中间件监控到卡片A或B拔出时,会自动销 毁卡片A或B的算法映射表。

中间件监控到当前卡片拔出时,会自动销毁当前卡片对应的算法映射表具 体为以下步骤:

步骤108-1:中间件监控到有读卡器(Reader)产生拔出事件;

具体的,中间件不停枚举操作系统中的读卡器(Reader)状态,当有卡片 拔出时,会触发相应的读卡器(Reader)产生拔出事件。

步骤108-2:中间件执行拔出操作处理,匹配拔出的卡片;

具体的,中间件将产生拔出事件的读卡器(Reader)和已做记录的所有读 卡器(Reader)逐一进行比较,如果比较成功,则表示拔出的卡片是识别过的 卡片,则执行步骤108-3,如果比较不成功,则不处理。

步骤108-3:中间件销毁匹配到的当前卡片对应的算法映射表;

具体的,中间件根据匹配的拔出卡片找到拔出卡片的算法映射表,对算法 映射表做销毁。

中间件被上层应用程序调用访问卡片时,执行以下操作如图2所示:

步骤201:中间件接收到上层应用程序想要执行的具体操作指令,中间件根 据所述具体操作指令得到预设算法、密钥对象和待处理数据;

具体地,所述具体操作指令可以为加解密操作指令或签名操作指令,比如 上层应用想执行DES的ECB模式加密操作,则加密操作指令包含的参数有:预 设算法、密钥对象的句柄、待处理数据以及待处理数据的长度。

步骤202:中间件从内存中获取一张与当前卡片匹配的算法映射表;

本实施例中具体的,中间件根据获取到的当前卡片的类型查找是否存在与 之对应的记录的读卡器(Reader),如存在则可以查找到一张动态创建好的算法 映射表,该动态创建好的算法映射表中包含有软算法和与卡片相关的硬算法对 象,所述软算法和硬算法对象一一对应;如不存在则查找到的是一张预置的算 法映射表,该预置的算法映射表中仅包含有软算法和软算法对象,所述软算法 和软算法对象一一对应。

步骤203:中间件在算法映射表中查找是否存在与所述预设算法匹配的软算 法,若存在则执行下一步,否则返回错误;

步骤204:中间件获取算法映射表中与所述软算法对应的算法对象;

具体地,中间件从算法映射表中获取的所述算法对象可以是硬算法对象, 也可以是软算法对象。

所述算法对象包含有中间件根据接收到的具体操作指令要执行相应操作的 操作方式。当所述具体操作指令为加解密操作指令时,所述算法对象包含实现 加解密的操作方式,当所述具体操作指令为签名操作指令时,所述算法对象包 含实现签名的操作方式。

例如,要执行的相应操作是加密操作,且所述算法对象是软算法对象时, 软算法对象包含调用openssl接口实现加密的操作方式;要执行的相应操作是 加密操作,且所述算法对象是软算法对象时,硬算法对象包含有向卡片发送APDU 指令实现加密的操作方式。

步骤205:中间件根据所述密钥对象和所述算法对象对所述待处理数据执行 相应操作。

以下两个实施例以如实施例1所述动态创建算法对象的方法在中间件中创 建好映射表后,中间件接收上层应用程序下发的加密操作指令为例进行详细介 绍。

实施例2

在实施例1基础上,本实施例提供上层应用程序调用中间件以PKCS#11接 口访问卡片为例,具体包括:

中间件给上层应用提供了C_Initialize接口,上层应用调用此接口,完成 中间件的加载,中间件内部创建监控线程,不停的枚举系统的读卡器,判断是 否有卡片插入,当有卡片插入时,创建卡片的算法映射表,通过上述流程实现 动态创建并使用功能对象。

步骤301:中间件接收到上层应用程序下发的加密操作指令,并从所述加密 操作指令中得到预设算法、密钥对象和待处理数据;

在步骤301之前还包括上层应用程序调用C_OpenSession接口,建立 Session会话;

本实施例中优选的,上层应用程序下发加密操作指令具体包括:

步骤300-1:上层应用程序调用函数C_GetSlotList获取指定槽的ID;

具体的,上层应用程序调用C_GetSlotList获取一个插入设备槽列表,从 槽列表中获取指定槽的ID,如果没有卡片插入则会获取到空的槽列表,等待卡 片插入。其中所述指定槽的ID是指当前卡片的槽的ID。

本步骤还可以包括:上层应用程序调用C_GetSlotInfo获得所述指定槽的 信息,所述指定槽的信息包括槽的字符串描述、槽的标志位等。

步骤300-2:上层应用程序根据所述指定槽的ID获取当前卡片的信息;

具体的,上层应用程序根据所述指定槽的ID调用函数C_GetTokenInfo以 获取当前卡片的信息,从而判断当前卡片是否是真正想要做加密操作的卡片。 所述当前卡片的信息包括卡片类型、卡片标志位、卡片用来存放密钥的空间总 容量等。

步骤300-3:上层应用程序调用函数C_GetMechanismList和 C_GetMechanismInfo,从当前卡片所支持的算法列表中获取预设算法;

具体地,上层应用程序调用C_GetMechanismList获取当前卡片所支持的算 法列表,根据当前卡片的槽的ID从所述算法列表中获取预设算法,并调用 C_GetMechanismInfo获取所述预设算法的信息,所述预设算法的信息包括预设 算法的名称、密钥的最大长度、密钥的最小长度、标志位。

步骤300-4:上层应用程序调用函数C_FindObjectsInit启动对密钥对象 的搜寻,搜寻过程中通过一次或多次调用函数FindObjects以获得密钥对象句 柄,当搜寻到密钥对象句柄时通过调用函数C_FindObjectsFinal结束搜寻操作;

步骤300-5:根据搜寻到的密钥对象句柄,上层应用程序调用函数 C_GetAttributeValue获取密钥对象的属性值从而确定一个密钥对象。

步骤300-6:上层应用程序向中间件下发加密操作指令;

具体的,所述加密操作指令用于上层应用程序根据密钥对象句柄调用函数 C_EncryptInit初始化一个加密操作,然后调用函数C_Encrypt来加密单一部 分数据,或者调用函数C_EncryptUpdate和C_EncryptFinal来加密多部分的数 据。

所述函数C_EncryptInit包含的参数有:当前的session会话句柄、算法 机制(例如AES_CBC加密机制)、密钥对象句柄。

所述函数C_Encrypt包含的参数有:指向待加密数据的指针、待加密数据 字节的长度、指向接收加密数据的单元的指针、指向包含加密数据字节长度单 元的指针。

步骤302:中间件从内存中获取一张与当前卡片对应的算法映射表;

本实施例中具体的,中间件根据当前卡片类型在内存中查找与之对应的记 录的读卡器(Reader),根据查找到的Reader在内存中获取一张动态创建好的 算法映射表。

步骤303:中间件在算法映射表中查找是否存在所述预设算法,若存在则执 行下一步,否则返回错误;

本实施例中,所述预设算法为AES_CBC算法。

步骤304:中间件从算法映射表中提取与所述预设算法一一对应的算法对 象;

本实施例中具体地,中间件从映射表中提取的所述算法对象包含有向卡片 发送APDU指令实现加密的操作方式。

步骤305:中间件利用获取的密钥对象和算法对象,对所述加密操作指令中 包含的待加密数据执行加密操作。

例如:所述密钥对象包含有执行AES_CBC加密的密钥值,所述算法对象是 向卡片发送APDU指令实现加密的操作方式,则对所述加密操作指令中包含的待 加密数据执行加密操作具体为:中间件通过向卡片发送APDU指令访问卡片,卡 片内部执行AES_CBC加密,执行成功后返回加密结果给中间件。

实施例3

在实施例1基础上,本实施例提供上层应用程序调用中间件以CSP接口访 问卡片为例,具体包括:

中间件给上层应用提供了CryptAcquireContext接口,上层应用调用此接 口,完成中间件的加载,中间件内部创建监控线程,不停的枚举系统的读卡器, 判断是否有卡片插入,当有卡片插入时,在内存中创建卡片的算法映射表,通 过上述流程实现动态创建并使用功能对象。

步骤401:中间件接收到上层应用程序下发的加密操作指令,并从所述具体 操作指令中解析得到预设算法、密钥对象和待处理数据;

本实施例中优选的,上层应用程序下发加密操作指令具体包括:

步骤400-1:上层应用程序调用函数CryptAcquireContext获得指定CSP的 密钥容器句柄,中间件内部会创建监控线程,监控卡片插入;

步骤400-2:根据密钥容器句柄获取当前CSP相关参数信息;

具体的,根据所述密钥容器句柄调用函数CryptGetProvParam以获取CSP 参数信息。所述当前CSP相关参数信息包括容器名字、预置算法列表、预置算 法列表信息(预设算法的名称、密钥的最大长度、密钥的最小长度、标志位) 等;

步骤400-3:上层应用程序调用函数CryptGenKey产生密钥对象,得到一个 密钥对象句柄;

本实施例中具体的,所述密钥对象可以包括对称密钥和非对称密钥。

步骤400-4:上层应用程序根据密钥对象句柄调用函数CryptGetKeyParam 获取密钥对象的信息;

本实施例中具体地,所述密钥对象的信息包括密钥的长度、算法ID等。

步骤400-5:上层应用程序向中间件下发加密操作指令;

具体的,所述加密操作指令用于上层应用程序通过调用函数CryptEncrypt 来加密单一部分数据或者多部分的数据。所述函数CryptEncrypt包含的参数有: 指向密钥对象句柄、哈希对象句柄、判断加密最后一部分数据布尔值(Final)、 保留值0、指向接收加密数据的单元的指针、待加密数据字节的长度、待加密数 据的字节长度。具体地,上层应用程序通过参数Final来判断是加密单一部分 还多部分,Final等于true表示加密最后一部分数据。

步骤402:中间件从内存中获取一张与当前卡片对应的算法映射表;

本实施例中具体的,中间件根据获取到的当前卡片类型在内存中查找与之 对应的记录的读卡器(Reader),根据查找到的Reader在内存中获取一张动态 创建好的算法映射表。

步骤403:中间件在算法映射表中查找是否存在所述预设算法,若存在则执 行下一步,否则返回错误;

本实施例中,所述预设算法为AES_CBC算法。

步骤404:中间件从算法映射表中提取与所述预设算法一一对应的算法对 象;

本实施例中具体地,中间件从映射表中提取的所述算法对象包含有向卡片 发送APDU指令实现加密的操作方式。

步骤405:中间件利用获取的密钥对象和算法对象,对所述加密操作指令中 包含的待加密数据执行加密操作。

例如:所述密钥对象是执行AES_CBC的密钥值,所述算法对象是向卡片发 送APDU指令实现加密的操作方式,则对所述加密操作指令中包含的待加密数据 执行加密操作具体为:中间件通过向卡片发送APDU指令访问卡片,卡片内部执 行AES_CBC加密,执行成功后返回加密结果给中间件。

以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本 发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号