NORFLASH存储密钥记录的方法、装置及计算机可读存储介质与流程

文档序号:11517634阅读:412来源:国知局
NOR FLASH存储密钥记录的方法、装置及计算机可读存储介质与流程

本发明属于计算机软件领域,尤其涉及一种norflash存储密钥记录的方法、装置及计算机可读存储介质。



背景技术:

在金融安全支付设备中,通常需要存储多个密钥,分别用于不同的加密用途。这些密钥往往以密文形式存储在flash中。flash是一种固态、电可擦除可写入、掉电不丢失信息的计算机存储介质。根据实现结构的不同,flash分为norflash和nandflash两种,其中,norflash是指以“或非门”为存储单元结构的flash。norflash的特点包括:可随机以字节为单位进行读取;只能以块(或扇区)为单位进行擦除,内存块只有被擦除后才能写入任意的新数据;可以对同一字节进行多次编程,即,将取值为“1”的位元改写为“0”。

在金融安全支付的软件领域,现有的在norflash存储密钥记录的方法是通过flash的文件系统存入文件的方式来实现。该方式会有以下的不足之处:

1)写入速度往往较慢,这是因为文件系统需要为众多文件的访问服务,并且底层实现起来流程多而复杂;

2)可靠性欠佳,这是因为,设备正在执行写操作时,若遇到设备掉电,则会发生写入动作没有真正完成,导致密钥信息丢失,或者密钥文件可能遭到毁坏,设备无法进行金融支付。

以上技术问题亟待解决。



技术实现要素:

本发明提供一种norflash存储密钥记录的方法、装置及计算机可读存储介质,以提高向norflash中写入密钥记录的速度和可靠性。

本发明第一方面提供了一种norflash存储密钥记录的方法,包括:

在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;

若所述校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;

在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

本发明第二方面提供了一种norflash存储密钥记录的装置,包括:

校验模块,用于在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;

重整模块,用于若所述校验模块校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;

循环写入模块,用于在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

本发明实施例的第三方面提供了一种计算设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;

若所述校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;

在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

本发明实施例的第四方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;

若所述校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;

在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

从上述本发明提供的技术方案可知,一方面,与现有技术在向norflash存储密钥记录时以文件系统方式写入不同,本发明提供的技术方案是对norflash中的密钥记录存储块直接写入密钥记录,写入速度更快;另一方面,在设备开机时增加了校验和对密钥记录存储块重整的过程,并且,在收到密钥记录写操作的请求时,循环滚动对第一密钥记录存储块和第二密钥记录存储块双写入操作,从而保障在执行写入操作而设备断电时的写操作的可靠性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的norflash存储密钥记录的方法的实现流程示意图;

图2是本发明实施例提供的在设备开机时对norflash中的密钥记录存储块进行校验的实现流程示意图;

图3是本发明实施例提供的norflash存储密钥记录的装置的结构示意图;

图4是本发明另一实施例提供的norflash存储密钥记录的装置的结构示意图;

图5是本发明另一实施例提供的norflash存储密钥记录的装置的结构示意图;

图6是本发明另一实施例提供的norflash存储密钥记录的装置的结构示意图;

图7是本发明另一实施例提供的norflash存储密钥记录的装置的结构示意图;

图8是本发明另一实施例提供的norflash存储密钥记录的装置的结构示意图;

图9是本发明实施例提供的计算设备的结构示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

为了说明本发明的技术方案,下面通过具体实施例来进行说明。

附图1是本发明实施例提供的norflash存储密钥记录的方法的实现流程示意图,主要包括以下步骤s101至s103,详细说明如下:

s101,在设备开机时对norflash中的密钥记录存储块进行校验,其中,密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块。

如背景技术所述,对norflash的设备操作,例如对norflash的第一密钥记录存储块或第二密钥记录存储块进行写密钥记录的操作,经常出现正在对norflash的第一密钥记录存储块或第二密钥记录存储块进行写密钥记录的操作时,设备突然掉电,导致第一密钥记录存储块或第二密钥记录存储块进行写密钥记录的操作失败。在设备开机时对norflash中的密钥记录存储块进行校验,其目的是为了校验上述情况出现时第一密钥记录存储块或第二密钥记录存储块中的数据即密钥记录是否正确。

在本发明实施例中,第一密钥记录存储块和第二密钥记录存储块分别可以是norflash分配的一个扇区,这两个扇区专门用于密钥管理模块对密钥记录的存储,其他模块和事务不得跨过密钥管理模块直接对其访问。一般而言,第一密钥记录存储块或第二密钥记录存储块的大小可以为64k、128k或256k字节。

作为本发明一个实施例,在设备开机时对norflash中的密钥记录存储块进行校验可通过如下步骤s201至s208实现,如附图2的流程图所示,说明如下:

s201,按照第一密钥记录存储块和第二密钥记录存储块的读密钥记录指针指示的偏移地址,从第一密钥记录存储块和第二密钥记录存储块分别读取密钥记录。

在本发明实施例中,密钥记录除了包括密钥标识号、密钥记录长度信息和循环冗余校验码之外,还包括密钥本体,其中,密钥标识号用于标识所属密钥记录,是一条密钥记录的编号,其大小在[1,n],此处的n为系统能够支持的密钥的总个数(后续描述中若不做特别说明,n均为系统能够支持的密钥的总个数),密钥记录长度信息表明所属密钥记录的长度,其大小为该条密钥记录的总字节数,循环冗余校验码用于验证所属密钥记录的完整性,密钥本体是将其明文信息采用系统密钥加密后存放到密钥记录存储块中的一条密钥。作为本发明一个实施例,假设一条密钥记录的密钥标识号(大小为2字节)和密钥记录长度信息(大小为2字节)占用4字节,则从第一密钥记录存储块或第二密钥记录存储块读取密钥记录可以是:先读取密钥记录的前4字节,依次得到密钥记录的密钥标识号和密钥记录长度信息;若密钥标识号无效(即,密钥标识号小于1或大于n,下同),则中止密钥记录读取过程;计算密钥记录后半部即循环冗余校验码和密钥本体的长度,密钥记录后半部的长度=密钥记录的长度-4;按照计算出的密钥记录后半部的长度,读出密钥记录后半部。

需要说明的是,在本发明实施例中,指针用于下一次对密钥记录存储块执行某种操作时指示的偏移地址,即,可按照指示的偏移地址在下一次对密钥记录存储块执行某种操作,例如,读密钥记录指针用于下一次对密钥记录存储块执行读取密钥记录时指示的偏移地址,可按照这个指示的偏移地址,在下一次从指示的偏移地址对应的存储单元执行读取密钥记录这一操作;再如,写密钥记录指针用于下一次对密钥记录存储块执行写入密钥记录时指示的偏移地址,可按照这个指示的偏移地址,在下一次向指示的偏移地址对应的存储单元执行写入密钥记录这一操作。

s202,判断读取的密钥记录的密钥标识号无效和/或密钥记录长度信息是否无效。

在本发明实施例中,密钥记录的密钥标识号有效是指其大小在[1,n]内,而密钥记录的密钥标识号无效是指其大小小于1或大于n。密钥记录长度信息有效是指其所表明的密钥记录的长度即该条密钥记录的总字节数属于系统所支持的长度,而无效是指其所表明的密钥记录的长度即该条密钥记录的总字节数不属于系统所支持的长度,例如,系统所支持的密钥记录长度是28、36、44字节,则18是无效长度,28是有效长度。

s203,若读取的密钥记录的密钥标识号无效和/或密钥记录长度信息无效,则对密钥标识号无效和/或密钥记录长度信息无效的密钥记录所在的密钥记录存储块的校验标记为校验失败。

s204,若密钥记录的密钥标识号和密钥记录长度信息有效,则校验密钥记录长度信息有效和密钥标识号有效且不为0的密钥记录的循环冗余校验码。

需要说明的是,在本发明实施例中,若一条密钥记录的密钥记录长度信息有效但密钥标识号为0,则表明该密钥记录已经删除,没有必要再对其读取和/或对其循环冗余校验码进行校验,可以直接跳过该密钥记录。因此,只对密钥记录长度信息有效和密钥标识号有效且不为0的密钥记录的循环冗余校验码进行校验。

具体地,对密钥记录长度信息有效和密钥标识号有效且不为0的密钥记录进行循环冗余校验码的校验过程包括:对读出的有效密钥记录长度信息、有效密钥标识号和密钥本体这三个连续的字段采用crc-16-ccitt算法、从头至尾地计算循环冗余校验码;比较计算出的循环冗余校验码与从密钥记录中读出的循环冗余校验码;若两者不等,则判断循环冗余校验码校验失败,否则,判断循环冗余校验码校验成功。

s205,判断循环冗余校验码校验是否失败。

s206,若循环冗余校验码校验失败,则对循环冗余校验码校验失败的密钥存储记录所在的密钥记录存储块的校验标记为校验失败。

s207,若密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,若密钥记录长度信息有效且密钥标识号为0,则将读密钥记录指针更新。

如前所述,若一条密钥记录的密钥记录长度信息有效但密钥标识号为0,则表明该密钥记录已经删除,可以直接跳过该密钥记录,读取下一条密钥记录。因此,若密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,若密钥记录长度信息有效且密钥标识号为0,则将读密钥记录指针更新,更新后的读密钥记录指针指示的偏移地址为读取的密钥记录长度与更新前的读密钥记录指针指示的偏移地址之和。例如,若从第一密钥记录存储块读取一条密钥记录kra之前,读密钥记录指针为pra,则在读取密钥记录kra、并判断密钥记录kra的密钥标识号和密钥记录长度信息有效后,将pra更新为pra’,pra’指示的偏移地址为密钥记录kra的长度与pra指示的偏移地址之和;再如,若从第二密钥记录存储块读取一条密钥记录krb之前,读密钥记录指针为prb,则在读取密钥记录krb、并判断密钥记录krb的密钥标识号和密钥记录长度信息有效后,将prb更新为prb’,prb’指示的偏移地址为密钥记录krb的长度与prb指示的偏移地址之和。

在将读密钥记录指针更新后,可以按照更新后的读密钥记录指针指示的偏移地址,从密钥记录存储块读取下一条密钥记录,即流程转至步骤s201,重复上述s201至s207的过程。

s208,若所有密钥记录的密钥标识号和密钥记录长度信息均有效且循环冗余校验码校验均成功,则对所有密钥标识号和密钥记录长度信息均有效且循环冗余校验码校验均成功的密钥记录所在的密钥记录存储块的校验标记为校验成功。

若一个密钥记录存储块的所有密钥记录的密钥标识号和密钥记录长度信息均有效且循环冗余校验码校验均成功,也就是,若某条记录的密钥标识号和密钥记录长度信息均为flash擦除后的缺省值,即,0xffff,则意味着密钥记录的读取操作已经到达未写入的空白区,对该密钥记录存储块的校验成功。

s102,若校验的结果为对第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针。

若步骤s101校验的结果为对第一密钥记录存储块或第二密钥记录存储块的校验失败,则需要对密钥记录存储块进行重整,即,将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针,以使第一密钥记录存储块和第二密钥记录存储块的数据保持一致。

在本发明实施例中,对第一密钥记录存储块或第二密钥记录存储块的校验失败包括两种情形,即,对第一密钥记录存储块校验成功但对第二密钥记录存储块的失败以及对第一密钥记录存储块校验失败但对第二密钥记录存储块的成功,以下通过s1至s4以及s’1至s’4分别说明:

s1,若第一密钥记录存储块的校验成功并且第二密钥记录存储块的校验失败,则擦除第二密钥记录存储块。

s2,将第一密钥记录存储块中偏移地址从0至a’addr的内存存储的数据复制至第二密钥记录存储块从0开始的内存。

如前所述,在附图2对密钥记录存储块校验过程中,在密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,密钥记录长度信息有效且密钥标识号为0时,更新读密钥记录指针,此处a’addr即为校验第一密钥记录存储块时读密钥记录指针更新为pra’后指示的偏移地址。

s3,将第二密钥记录存储块的读密钥记录指针更新为pra’。

若更新后的第二密钥记录存储块的读密钥记录指针用prb’表示,则prb’=pra’。

s4,将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为pra’。

若更新后的第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针用pw’表示,则pw’=pra’。更新第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针,主要是在后续对密钥记录存储模块的写操作过程中,按照更新后的写密钥记录指针pw’指示的偏移地址,向第一密钥记录存储块和/或第二密钥记录存储块写入一条密钥记录。

s’1,若第一密钥记录存储块的校验失败并且第二密钥记录存储块的校验成功,则擦除第一密钥记录存储块。

s’2,将第二密钥记录存储块中偏移地址从0至b’addr的内存存储的数据复制至第一密钥记录存储块从0开始的内存。

如前所述,在附图2对密钥记录存储块校验过程中,在密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,密钥记录长度信息有效且密钥标识号为0时,更新读密钥记录指针,此处b’addr即为校验第二密钥记录存储块时读密钥记录指针更新为prb’后指示的偏移地址。

s’3,将第一密钥记录存储块的读密钥记录指针更新为prb’。

若更新后的第一密钥记录存储块的读密钥记录指针用pra’表示,则pra’=prb’。

s’4,将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prb’。

若更新后的第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针用pw’表示,则pw’=prb’。更新第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针,主要是在后续对密钥记录存储模块的写操作过程中,按照更新后的写密钥记录指针pw’指示的偏移地址,向第一密钥记录存储块和/或第二密钥记录存储块写入一条密钥记录。

上述实施例排除了对第一密钥记录存储块和第二密钥记录存储块的校验均成功的情形。以下说明若校验的结果为对第一密钥记录存储块和第二密钥记录存储块的校验成功时的处理过程,步骤包括s”1至s”3:

s”1,若校验的结果为对第一密钥记录存储块和第二密钥记录存储块的校验成功,则比较第一密钥记录存储块中密钥记录的总数据长度ntotal_a和第二密钥记录存储块中密钥记录的总数据长度ntotal_b。

s”2,若ntotal_a大于ntotal_b,则先擦除第二密钥记录存储块、再将第一密钥记录存储块中偏移地址从0至aaddr的内存存储的数据复制至第二密钥记录存储块从0开始的内存、将第二密钥记录存储块的读密钥记录指针更新为prka以及将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prka。

此处,aaddr在数值上等于prka指示的偏移地址的值,prka为设备开机前最后一次读取所述第一密钥记录存储块的密钥记录后所述第一密钥记录存储块更新后的读密钥记录指针。若第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新后的写密钥记录指针用pw’表示,则将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prka后,pw’=prka。

s”3,若ntotal_a小于ntotal_b,则先擦除第一密钥记录存储块、再将第二密钥记录存储块中偏移地址从0至baddr的内存存储的数据复制至第一密钥记录存储块从0开始的内存、将第一密钥记录存储块的读密钥记录指针更新为prkb以及将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prkb。

此处,baddr在数值上等于prkb指示的偏移地址的值,prkb为设备开机前最后一次读取第二密钥记录存储块的密钥记录后第二密钥记录存储块更新后的读密钥记录指针。若第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新后的写密钥记录指针用pw’表示,则将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prka后,pw’=prkb。

需要说明的是,若校验的结果为对第一密钥记录存储块和第二密钥记录存储块的校验均校验成功,并且ntotal_a与ntotal_b相等,则无需对第一密钥记录存储块和第二密钥记录存储块做任何重整。

s103,在收到密钥记录写操作的请求时,根据更新的写密钥记录指针指示的偏移地址,循环滚动向第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

作为本发明一个实施例,根据更新的写密钥记录指针指示的偏移地址,循环滚动向第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录可通过如下步骤s10301至s10311实现:

s10301,按照预设密钥记录格式生成密钥记录。

如前所述,一条密钥记录主要包括密钥标识号、密钥记录长度信息、循环冗余校验码和密钥本体等字段,其用c语言的一个结构体可表示如下(“\\”后表示对c语言语句的解释):

在本发明实施例中,可按照上述结构体表示的密钥记录格式生成一条密钥记录。

s10302,根据更新的写密钥记录指针指示的偏移地址,计算生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和。

更新的写密钥记录指针,是指步骤s102中,对第一密钥记录存储块或第二密钥记录存储块进行写密钥记录这一操作完成后所更新的写密钥记录指针,如前述实施例用pw’表示的更新的写密钥记录指针。在本发明实施例中,生成的密钥记录的长度可从生成的密钥记录的密钥记录长度信息中获取,而第一密钥记录存储块尚存的密钥记录的长度在数值上与pw’指示的偏移地址的值相等。

s10303,若生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和超出了第一密钥记录存储块的容量,则从第一密钥记录存储块为0的偏移地址开始,依次读取第一密钥记录存储块中有效密钥记录至随机存取内存。

生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和超出了第一密钥记录存储块的容量,即,经步骤s10302计算出的生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和大于或等于第一密钥记录存储块的容量。这种情况下,从第一密钥记录存储块为0的偏移地址开始,依次读取第一密钥记录存储块中有效密钥记录至随机存取内存ram。此处的有效密钥记录,是指密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功的密钥记录,无效的密钥记录无需读取至ram。

s10304,擦除第一密钥记录存储块。

s10305,将从随机存取内存读取的有效密钥记录紧凑地写入第一记录存储块中地址连续的内存。

所谓地址连续,是指写入有效密钥记录到内存时,密钥记录之间没有空闲的内存。

s10306,将第一密钥记录存储块更新的写密钥记录指针的值再次更新为第一密钥记录存储块中有效密钥记录的长度。

若第一密钥记录存储块中有效密钥记录的长度用ne表示,再次更新的第一密钥记录存储块的写密钥记录指针用pw’表示,则pw’=ne。

s10307,向再次更新的第一密钥记录存储块写密钥记录指针指示的偏移地址写入生成的密钥记录。

即,向pw’指示的偏移地址写入经步骤s10301生成的密钥记录。

s10308,擦除第二密钥记录存储块。

s10309,将从随机存取内存读取的有效密钥记录紧凑地写入第二密钥记录存储块中地址连续的内存。

s10310,将更新的第二密钥记录存储块写密钥记录指针再次更新为再次更新的第一密钥记录存储块写密钥记录指针。

若再次更新的第二密钥记录存储块的写密钥记录指针用pw’表示,则pw’=ne。

s10311,向再次更新的第二密钥记录存储块写密钥记录指针指示的偏移地址写入生成的密钥记录。

步骤s10311与步骤s10307类似,即,在第二密钥记录存储块中向pw’指示的偏移地址写入经步骤s10301生成的密钥记录。

在上述步骤s10301至s10311的实施中,还包括遍历向第一密钥记录存储块或第二密钥记录存储块中地址连续的内存写入的有效密钥记录,若向第一密钥记录存储块或第二密钥记录存储块中地址连续的内存写入的有效密钥记录存在密钥标识号与经步骤s10301生成的密钥记录的密钥标识号相同的密钥记录,则将第一密钥记录存储块或第二密钥记录存储块中地址连续的内存中与经步骤s10301生成的密钥记录的密钥标识号相同的密钥记录的密钥标识号更改为0,以表示该条密钥记录是已删除密钥记录。

需要说明的是,上述附图1示例的方法中,步骤s102之后也可能收到密钥记录删除请求或密钥记录读操作请求,以下分别说明。

以第一密钥记录存储块删除密钥记录为例,在收到应用层发出的密钥记录删除请求后,可从密钥记录删除请求中获取密钥标识号;然后,再从第一密钥记录存储块偏移地址为0的存储单元开始,遍历各条密钥记录,检查其密钥标识号是否等于从密钥记录删除请求中获取的密钥标识号;若第一密钥记录存储块中遍历到的密钥记录r的密钥标识号等于从密钥记录删除请求中获取的密钥标识号,则将第一密钥记录存储块中遍历到的密钥记录r的密钥标识号改写为0;若第一密钥记录存储块中遍历到的密钥记录r的密钥标识号不等于从密钥记录删除请求中获取的密钥标识号,则将读密钥记录指针pra更新为pra’,pra’指示的偏移地址的值=pra指示的偏移地址的值+密钥记录r的长度;继续根据pra’在下一条密钥记录中查找,直至遍历完所有密钥记录,即,直至密钥标识号与遍历到的密钥记录的长度均等于0xffff。

在第二密钥记录存储块删除密钥记录与在第一密钥记录存储块删除密钥记录过程类似,不做赘述。

以第一密钥记录存储块读取密钥记录为例,在收到应用层发出的密钥记录读操作请求后,则可从密钥记录读操作请求中获取密钥标识号;然后,从第一密钥记录存储块偏移地址为0的存储单元开始,遍历各条密钥记录,检查其密钥标识号是否等于从密钥记录读操作请求中获取的密钥标识号:若第一密钥记录存储块中遍历到的密钥记录r’的密钥标识号等于从密钥记录读操作请求中获取的密钥标识号,则按照密钥记录r’中密钥记录长度信息字段指示的长度读出密钥记录r’;若第一密钥记录存储块中遍历到的密钥记录r’的密钥标识号不等于从密钥记录读操作请求中获取的密钥标识号,则将读密钥记录指针pra更新为pra’,pra’指示的偏移地址的值=pra指示的偏移地址的值+密钥记录r的长度;继续根据pra’在下一条密钥记录中查找,直至遍历完所有密钥记录,即,直至密钥标识号与遍历到的密钥记录的长度均等于0xffff。

从上述附图1示例的norflash存储密钥记录的方法可知,一方面,与现有技术在向norflash存储密钥记录时以文件系统方式写入不同,本发明提供的技术方案是对norflash中的密钥记录存储块直接写入密钥记录,写入速度更快;另一方面,在设备开机时增加了校验和对密钥记录存储块重整的过程,并且,在收到密钥记录写操作的请求时,循环滚动对第一密钥记录存储块和第二密钥记录存储块双写入操作,在执行写入操作而设备断电时的写操作的可靠性。

图3是本发明实施例提供的norflash存储密钥记录的装置的示意图,其可以是一计算设备或者其中的功能模块。图3示例的norflash存储密钥记录的装置主要包括校验模块301、重整模块302和循环写入模块303,详细说明如下:

校验模块301,用于在设备开机时对norflash中的密钥记录存储块进行校验,其中,密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;

重整模块302,用于若校验模块301校验的结果为对第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;

循环写入模块303,用于在收到密钥记录写操作的请求时,根据更新的写密钥记录指针指示的偏移地址,循环滚动向第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

需要说明的是,本发明实施例提供的装置,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

附图3示例的校验模块301可包括第一读取单元401、第一标记单元402、crc校验单元403、第二标记单元404、读指针更新单元405和第三标记单元406,如附图4示例的norflash存储密钥记录的装置,其中:

第一读取单元401,用于按照第一密钥记录存储块和第二密钥记录存储块的读密钥记录指针指示的偏移地址,从第一密钥记录存储块和第二密钥记录存储块分别读取密钥记录,其中,密钥记录包括密钥标识号、密钥记录长度信息和循环冗余校验码;

第一标记单元402,用于若读取的密钥记录的密钥标识号无效和/或密钥记录长度信息无效,则对密钥标识号无效和/或密钥记录长度信息无效的密钥记录所在的密钥记录存储块的校验标记为校验失败;

crc校验单元403,用于若密钥记录的密钥标识号和密钥记录长度信息有效,则校验密钥记录长度信息有效和密钥标识号有效且不为0的密钥记录的循环冗余校验码;

第二标记单元404,用于若循环冗余校验码校验失败,则对循环冗余校验码校验失败的密钥存储记录所在的密钥记录存储块的校验标记为校验失败;

读指针更新单元405,用于若密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,若密钥记录长度信息有效且密钥标识号为0,则将读密钥记录指针更新;

若密钥记录长度信息有效、密钥标识号有效且不为0以及循环冗余校验码校验成功,或者,若密钥记录长度信息有效且密钥标识号为0,则第一读取单元401、第一标记单元402、crc校验单元403、第二标记单元404和读指针更新单元405依次重复各自的上述操作;

第三标记单元406,用于若所有密钥记录的密钥标识号和密钥记录长度信息均有效且循环冗余校验码校验均成功,则对所有密钥标识号和密钥记录长度信息均有效且循环冗余校验码校验均成功的密钥记录所在的密钥记录存储块的校验标记为校验成功。

附图3示例的重整模块302可包括第一擦除单元501、第一复制单元502、第一指针更新单元503和第二指针更新单元504,如附图5示例的norflash存储密钥记录的装置,其中:

第一擦除单元501,用于若第一密钥记录存储块的校验成功并且第二密钥记录存储块的校验失败,则擦除第二密钥记录存储块;

第一复制单元502,用于将第一密钥记录存储块中偏移地址从0至a’addr的内存存储的数据复制至第二密钥记录存储块从0开始的内存,其中,a’addr为校验第一密钥记录存储块时读密钥记录指针更新为pra’后指示的偏移地址;

第一指针更新单元503,用于将第二密钥记录存储块的读密钥记录指针更新为pra’;

第二指针更新单元504,用于将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为pra’。

附图3示例的重整模块302可包括第二擦除单元601、第二复制单元602、第三指针更新单元603和第四指针更新单元604,如附图6示例的norflash存储密钥记录的装置,其中:

第二擦除单元601,用于若第一密钥记录存储块的校验失败并且第二密钥记录存储块的校验成功,则擦除第一密钥记录存储块;

第二复制单元602,用于将第二密钥记录存储块中偏移地址从0至b’addr的内存存储的数据复制至第一密钥记录存储块从0开始的内存,其中,b’addr为校验第二密钥记录存储块时读密钥记录指针更新为prb’后指示的偏移地址;

第三指针更新单元603,用于将第一密钥记录存储块的读密钥记录指针更新为prb’;

第四指针更新单元604,用于将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prb’。

附图3示例的norflash存储密钥记录的装置还包括比较模块701、第一处理模块702和第二处理模块703,如附图7示例的norflash存储密钥记录的装置,其中:

比较模块701,用于若校验模块301校验的结果为对第一密钥记录存储块和第二密钥记录存储块的校验成功,则比较第一密钥记录存储块中密钥记录的总数据长度ntotal_a和第二密钥记录存储块中密钥记录的总数据长度ntotal_b;

第一处理模块702,用于若比较模块701的比较结果为ntotal_a大于ntotal_b,则先擦除第二密钥记录存储块,再将第一密钥记录存储块中偏移地址从0至aaddr的内存存储的数据复制至第二密钥记录存储块从0开始的内存、将第二密钥记录存储块的读密钥记录指针更新为prka以及将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prka,其中,aaddr在数值上等于prka指示的偏移地址的值,pra为设备开机前最后一次读取第一密钥记录存储块的密钥记录后第一密钥记录存储块更新后的读密钥记录指针;

第二处理模块703,用于若比较模块701的比较结果为ntotal_a小于ntotal_b,则先擦除第一密钥记录存储块,再将第二密钥记录存储块中偏移地址从0至baddr的内存存储的数据复制至第一密钥记录存储块从0开始的内存、将第一密钥记录存储块的读密钥记录指针更新为prkb以及将第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针更新为prkb,其中,baddr在数值上等于prkb指示的偏移地址的值,prkb为设备开机前最后一次读取第二密钥记录存储块的密钥记录后第二密钥记录存储块更新后的读密钥记录指针。

附图3示例的循环写入模块303可包括生成单元801、计算单元802、第二读取单元803、第三擦除单元804、第一写入单元805、第五指针更新单元806、第二写入单元807、第四擦除单元808、第三写入单元809、第六指针更新单元810和第四写入单元811,如附图8示例的norflash存储密钥记录的装置,其中:

生成单元801,用于按照预设密钥记录格式生成密钥记录;

计算单元802,用于根据更新的写密钥记录指针指示的偏移地址,计算生成单元801生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和;

第二读取单元803,用于若生成单元801生成的密钥记录与第一密钥记录存储块尚存的密钥记录的长度之和超出了第一密钥记录存储块的容量,则从第一密钥记录存储块为0的偏移地址开始,依次读取第一密钥记录存储块中有效密钥记录至随机存取内存;

第三擦除单元804,用于擦除第一密钥记录存储块;

第一写入单元805,用于将从随机存取内存读取的有效密钥记录紧凑地写入第一记录存储块中地址连续的内存;

第五指针更新单元806,用于将第一密钥记录存储块更新的写密钥记录指针的值再次更新为第一密钥记录存储块中有效密钥记录的长度;

第二写入单元807,用于向再次更新的第一密钥记录存储块写密钥记录指针指示的偏移地址写入生成单元801生成的密钥记录;

第四擦除单元808,用于擦除第二密钥记录存储块;

第三写入单元809,用于将从随机存取内存读取的有效密钥记录紧凑地写入第二密钥记录存储块中地址连续的内存;

第六指针更新单元810,用于将更新的第二密钥记录存储块写密钥记录指针再次更新为再次更新的第一密钥记录存储块写密钥记录指针;

第四写入单元811,用于向再次更新的第二密钥记录存储块写密钥记录指针指示的偏移地址写入生成单元801生成的密钥记录。

图9是本发明一实施例提供的计算设备的结构示意图。如图9所示,该实施例的计算设备9包括:处理器90、存储器91以及存储在存储器91中并可在处理器90上运行的计算机程序92,例如norflash存储密钥记录的方法的程序。处理器90执行计算机程序92时实现上述norflash存储密钥记录的方法实施例中的步骤,例如图1所示的步骤s101至s103。或者,处理器90执行计算机程序92时实现上述各装置实施例中各模块/单元的功能,例如图3所示校验模块301、重整模块302和循环写入模块303的功能。

示例性的,norflash存储密钥记录的方法的计算机程序92主要包括:在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;若所述校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。计算机程序92可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器91中,并由处理器90执行,以完成本发明。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序92在计算设备9中的执行过程。例如,计算机程序92可以被分割成校验模块301、重整模块302和循环写入模块303的功能(虚拟装置中的模块),各模块具体功能如下:校验模块301,用于在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;重整模块302,用于若所述校验模块校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;循环写入模块303,用于在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。

计算设备9可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算设备9可包括但不仅限于处理器90、存储器91。本领域技术人员可以理解,图9仅仅是计算设备9的示例,并不构成对计算设备9的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如终端设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器90可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器91可以是计算设备9的内部存储单元,例如计算设备9的硬盘或内存。存储器91也可以是计算设备9的外部存储设备,例如计算设备9上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器91还可以既包括计算设备9的内部存储单元也包括外部存储设备。存储器91用于存储计算机程序以及终端设备所需的其他程序和数据。存储器91还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,norflash存储密钥记录的方法的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤,即,在设备开机时对norflash中的密钥记录存储块进行校验,所述密钥记录存储块包括第一密钥记录存储块和第二密钥记录存储块;若所述校验的结果为对所述第一密钥记录存储块或第二密钥记录存储块的校验失败,则将校验成功的密钥记录存储块中的数据复制至校验失败的密钥记录存储块,并更新所述第一密钥记录存储块和第二密钥记录存储块的写密钥记录指针;在收到密钥记录写操作的请求时,根据所述更新的写密钥记录指针指示的偏移地址,循环滚动向所述第一密钥记录存储块和第二密钥记录存储块写入按照预设密钥记录格式生成的密钥记录。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1