具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,除非另有明确的规定和限定,术语“安装”、“设置”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
请参阅图1,为本发明实施例提供的一种安全保护***框图。所述安全保护***应用于用户终端10,所述用户终端10与第一终端20和第二终端30近场通信(Near FieldCommunication,NFC)连接。其中,所述近场通信是一种短距高频的无线电技术,在10厘米距离内能够以13.56MHz的频率运行,其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。目前,近场通信已成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS102 190标准。可选地,近场通信设备信息可以采用主动和被动两种读取模式。
可选地,所述用户终端10可以采用Android、IOS、BlackBerry或者其他能够支持所述近场通信应用的其他操作***。本发明实施例采用安装有Android***的用户终端10。
可选地,所述第一终端20和所述第二终端30可以为日常生活中,常见的NFC卡片,如公交卡、门禁卡等,也可以为具有NFC功能的移动终端等。在本发明实施例中,进行文件加密和解密时,只读取所述第一终端20或所述第二终端30的序列码信息,不会获取或者写入任何其他信息,以保证该用户终端20的使用者的安全。
进一步地,请参阅图2,为本发明实施例的安全保护***的加密功能单元结构框图。在对文件进行加密的过程中,所述***包括第一选择模块102、第一判断模块104、第二判断模块106、第一信息获取模块108、第一秘钥生成模块110和加密模块112。
所述第一选择模块102用于选取用户隐私文件。可选地,所述第一选择模块102可为所述用户终端10中的操作***自带的文件浏览器。
所述第一判断模块104用于判断所述用户隐私文件是否存在,若存在,则对所述用户隐私文件进行标记,并作为待加密文件。所述第一判断模块104还用于判断所述用户隐私文件的类型是否为指定类型,若为指定类型,则作为待加密文件。
可选地,除过上述所述第一判断模块104用于先后判断所述用户隐私文件是否存在和所述用户隐私文件的类型是否为指定类型之外,所述第一判断模块104也可以单独用于判断所述用户隐私文件是否存在,或单独用于判断所述用户隐私文件的类型是否为指定类型。
所述第二判断模块106用于判断所述用户终端10是否支持所述第一终端20信息的读取,若所述用户终端10支持所述第一终端20信息的读取,则读取所述第一终端20的序列码信息。
所述第一信息获取模块108用于获取第一终端20的序列码信息,作为加密元数据。具体地,所述第一信息获取模块108首先获取所述第一终端20的数据信息,然后对所述数据信息进行过滤提取,从而得到所述序列码信息,以作为加密元数据。
所述第一秘钥生成模块110用于通过加密算法对所述加密元数据进行加密,得到加密秘钥。可选地,对所述加密元数据进行加密时,可以选取一种或者多种不同的加密算法,其中,本发明实施例采用MD5加密算法对所述加密元数据进行加密。
所述加密模块112用于通过所述加密秘钥对待加密文件进行加密,得到加密文件,并将所述加密文件按照指定路径进行保存。
可选地,所述安全保护***在进行文件加密时,还包括第三判断模块114,所述第三判断模块114用于选取所述加密文件的存放地址,并判断所述存放地址的存储空间是否足够,以及选取的目标存放地址是否为指定类型。
进一步地,请参阅图3,为本发明实施例的安全保护***的解密功能单元结构框图,在对文件进行解密的过程中,所述***还包括第二选择模块116、第二信息获取模块118、第二秘钥生成模块120和秘钥匹配模块122。
其中,所述第二选择模块116用于选取待解密的文件。所述第二信息获取模块118用于获取所述第二终端30的序列码信息,作为解密元数据。所述第二秘钥生成模块120,用于使用所述加密算法对所述解密元数据加密,得到解密秘钥。所述秘钥匹配模块122,用于将所述解密秘钥与所述加密秘钥进行匹配,若匹配成功,则打开所述待解密的文件。
其中,通过所述第二秘钥生成模块120对所述解密元数据加密时,和所述第一秘钥生成模块110在对所述加密元数据进行加密时,采用的加密算法相同。
应当理解,当对所述待解密文件解密成功时,所述第二终端30与所述第一终端20应为具有相同序列号的同一终端,即所述用户终端10通过所述第一终端20得到的加密秘钥与通过所述第二终端30得到的解密秘钥相同。反之,解密失败。
基于以上安全保护***的设计和描述,下面将在采用Android***的用户终端10中,对所述安全保护方法作进一步阐述。请参照图4,是本发明较佳实施例提供的应用于图2所示的安全保护***的加密功能单元中的安全保护方法中的加密方法流程图。以下步骤是对图4所示的具体流程的详细阐述。
步骤S101,选取用户隐私文件。
本发明实施例中,步骤S101由图2中的第一选择模块102执行。具体地,在所述用户终端10中,当用户需要对隐私数据、文件等进行加密时,通过所述第一选择模块102选取用户隐私文件,其代码如下:
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");//设置类型,可以是任意类型或任意后缀
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent,1);
在完成用户隐私文件选取后,所述用户终端10通过onActivityResult方法可以接收到用户选择的隐私文件信息,该信息是一个文件的绝对地址的字符串,在Android中通过该字符串可以获得该隐私文件。
步骤S102,判断用户隐私文件是否存在,若不存在,则执行步骤S101,若存在,则执行步骤S103。
步骤S103,对用户隐私文件进行标记,作为待加密文件。
具体地,在完成步骤S101后,获得了该文件的绝对地址后,需要判断该用户隐私文件是否存在。因为在选取过程中,可能由于一些意外导致该文件被删除,而使本次加密程序无法继续。因此,具体判断方法如下:
File f=new File("/storage/sdcard/test.pdf");
f.exists();
上述代码中,首先对得到的字符串新建一个File对象,该对象为获取的隐私文件是否存在的基准,通过该对象执行exists方法来判断该用户隐私文件是否存在,若返回值为false,则不存在;若返回值为true,则用户隐私文件存在,并对所述用户隐私文件进行标记,作为待加密文件。
步骤S104,判断是否为指定类型,若不是,则执行步骤S101,若为指定类型,则执行步骤S105。
具体地,在完成步S103后,需要判断所述待加密文件是否为指定类型,即判断所述待加密文件是一个文件夹还是一个文件,因为本发明只能加密一个文件,而无法加密一个文件夹。在判断过程中,使用file函数执行isDirectory()来判断所述待加密文件是否为文件夹,若返回值为true,则为文件夹,这时需要返回步骤S101重新选择;若返回值为false,则执行步骤S105。在本发明实施例中,步骤S102-步骤S104由图2中的第一判断模块104完成。
可选地,所述步骤S102和所述步骤S104也可以分开进行,即在一个实施例中,可以只对选取的所述用户隐私文件进行类型判定,或者只进行文件的存在性判定,并不限于本发明实施例给出的范围。
步骤S105,判断所述用户终端10是否支持所述第一终端20信息的读取,若不支持,则加密流程结束;若支持,则执行步骤S106。
本发明实施例中,步骤S105由图2中的第二判断模块106完成。具体地,所述用户终端10开始读取所述第一终端20的序列码信息时,是通过所述用户终端10上的NfcAdapter方法来获取的。因此,首先需要判断所述用户终端10是否支持NFC功能。若所述用户终端10不支持,则在使用NfcAdapter初始化后,返回值为null,加密流程结束;若返回值不为null,则继续步骤S106。
步骤S106,获取第一终端20的序列码信息,作为加密元数据。
本发明实施例中,步骤S106由图2中的第一信息获取模块108完成。具体地,所述用户终端10获取所述第一终端20的数据信息是通过以下程序实现:
Parcelable[]rawArray=
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage mNdefMsg=(NdefMessage)rawArray[0];
NdefRecord mNdefRecord=mNdefMsg.getRecords()[0];
其中,第一、二行代码是开始获取到的所有NFC数据信息,该数据信息只是NFC模块的数据。第三行是根据该数据信息来读取与所述用户终端10近场通信的所述第一终端20的数据信息,若获取失败或所述第一终端20异常,则NdefRecord的返回值为空,加密流程结束;若返回值有数据,则通过NdefRecord读取所述第一终端20的数据信息,程序如下:
String(mNdefRecord.getPayload(),"UTF-8");
进一步地,由于所述数据信息有很多,因此本发明实施列选取所述数据信息的一部分作为所述加密元数据。具体地,将使用所述第一终端20的序列码作为加密元数据,所述序列码位于所述数据信息的SEL字符串之后,因此,通过过滤SEL字符串之前的数据即可得到所述序列码信息。
具体地,本发明实施例使用Android中的split来截取所述SEL字符串。即通过使用strsplit(“[SEL]”)函数截取一个字符串数组,该数组有两个数据,第一个是SEL之前的数据,第二个是SEL之后的数据,可直接采用str[1]函数获取第二个数据,即所述序列码信息,并将其作为加密元数据。
可选地,在通过NdefRecord读取所述第一终端20的数据信息之后,也可直接将所述数据信息作为加密元数据,从而进一步增大密码的复杂性。
步骤S107,对加密元数据进行加密,生成加密秘钥。
在本发明实施例中,步骤S108由图2中的第一秘钥生成模块110完成。具体地,将该加密元数据通过MD5加密算法进行加密所得到的字符串即为加密秘钥。
步骤S108,通过所述加密秘钥对待加密文件进行加密,得到加密文件。
在本发明实施例中,步骤S108由图2中的加密模块112完成,具体地,通过使用java中的DES来进行,程序如下:
上述方法中,首先使用Cipher创建一个加密类,并将this.Key传入,而this.key则是上述所述加密秘钥,该加密密钥写入后,将开始文件流,并将其加入到加密流CipherInputStream中进行加密,得到加密文件。
步骤S109,选取加密文件存放地址。
步骤S110,判断存放空间是否足够,若存放空间不够,则执行步骤S109,若存放空间足够,则执行步骤S111。
步骤S111,存放加密文件。
在本发明实施例中,步骤S109-步骤S111是由图2中的第三判断模块114完成。具体地,在完成文件加密后,所述用户终端10将提示用户选取所述加密文件的存放地址。具体选择方法如步骤S100进行选取,然后执行步骤S110,判断文件的存储空间是否足够达到加密文件所需的存放空间大小。判断的方式如下:
StatFs dataFs=new StatFs(Path);
long sizes=(long)dataFs.getFreeBlocks()*(long)dataFs.getBlockSize();
上述代码是判断该路径下剩余的空间大小,并使用返回的sizes来和选取的文件进行判断,如果空间大则可以进行写入,如果不够,则提示用户重新选择。
可选地,在完成步骤S109后,可通过和步骤S103相同的方法进行文件类型的判断。但是,本步骤选取的文件类型应该为文件夹而非文件,因此判断isDirectory为true时才可以执行下一步,如果是false,则需要重新执行步骤S109。
进一步地,请参照图5,是本发明较佳实施例提供的应用于图3所示的安全保护***的解密功能单元中的安全保护方法中的解密方法流程图。以下步骤是对图5所示的具体流程进行的详细阐述。
步骤S112,选取待解密文件。
在本发明实施例中,步骤S112由图3中的第二选择模块116完成。具体地,选择待解密文件,依然使用上述步骤S101相同的文件选择方式进行选择。在选取完成后,需要选择解密后文件的存放地址,在使用该地址时,同时需要判断该地址的空间是否足够解密后的文件存放。具体方法如步骤S109和步骤S110,这里不再赘述。
步骤S113,获取第二终端30的序列码信息,作为解密元数据。
步骤S114,对所述解密元数据加密,得到解密秘钥。
步骤S114由图3中的第二秘钥生成模块120完成。具体地,步骤S113和步骤S114的具体流程与步骤S106和步骤S107相同,获取第二终端30的序列码信息,作为解密元数据,对所述解密元数据加密,得到解密秘钥。详细流程这里不再赘述。
步骤S115,将所述解密秘钥与所述加密秘钥进行匹配,若匹配成功,则打开所述待解密文件。
在本发明实施例中,步骤S115由图3中的秘钥匹配模块122完成。具体地,解密过程使用java中的DES算法来进行解密,将解密文件,解密秘钥及解密后文件存放地址传入,使用如下信息进行解密:
Cipher cipher=Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE,this.key);
InputStream is=new FileInputStream(file);
OutputStream out=new FileOutputStream(dest);
CipherOutputStream cos=new CipherOutputStream(out,cipher);
上述信息中,首先初始化一个des方法的Cipher,再通过创建文件流将文件及解密秘钥信息一起传入,生成一个解密的文件流并写入到文件中。若输入的秘钥匹配失败,则会生成乱码,流程结束;若秘钥匹配成功,则生成一个解密文件,该文件即为用户最终所需要的文件。
综上所述,本发明提供的安全保护方法和***,应用于与第一终端20近场通信连接的用户终端10。基于安全保护***的安全保护方法通过获取第一终端20的序列码信息,作为加密元数据。再通过加密算法对加密元数据进行加密,生成加密秘钥。最后,通过加密秘钥对待加密文件进行加密,得到加密文件并按照指定路径进行保存。当需要进行文件解密时,则通过所述第一终端20与所述用户终端10接触,即可完成文件解密。本发明能够有效避免现有技术中,密码容易泄露、丢失等带来的一系列问题,同时也进一步提高了终端数据的安全性。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。