具体实施方式
为了提高进程间进行信息交互的安全性,本发明的实施例提供一种进程间信息交互的方法及装置。下面结合附图对本发明实施例提供的进程间信息交互的方法及装置进行详细描述。
实施例1
如图1所示,本发明实施例提供的进程间信息交互的方法,包括:
步骤101、获取信息交互通道的动态参数作为标识参数;
所述信息交互通道的标识参数可以是预设的标识参数(以下简称预设参数),也可以是在预设参数不存在的情况下,随机生成的新的标识参数(即动态参数);在本发明实施例中,优选地以所述动态参数作为信息交互通道的标识参数。
步骤102、根据所述标识参数访问信息交互通道;
所述标识参数包括:消息标识、窗口标题、共享内存的名字、或者有名管道的名字;
而且,在本发明实施例中,所述根据标识参数访问信息交互通道可以是打开或者获取已有的与所述标识参数对应的信息交互通道;如果所述与标识参数对应的信息交互通道不存在的话,则所述根据标识参数访问信息交互通道还可以是以所述标识参数为通道名称创建新的信息交互通道。
步骤103、通过所述信息交互通道进行进程间的信息交互。
本发明实施例提供的进程间信息交互的方法,在进程启动后确定信息交互通道的过程中,获取信息交互通道的标识参数,该标识参数可以是预设参数也可以是新生成的动态参数,然后根据该标识参数访问信息交互通道,使得信息交互通道根据标识参数的变化而变化,增大了一个进程对应的信息交互通道被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例2
在本发明实施例中,信息安全设备均为智能卡,且均以进程A与其他进程进行信息交互为例,以下皆同,不再赘述。
在标识参数存储在智能卡、且所述信息交互通道为消息TD的情况下,本发明实施例提供的通过动态消息ID实现进程间信息交互的方法,如图2所示,具体包括以下步骤:
步骤201、启动主机上的进程A;
步骤202、进程A向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤203、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤204;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤204、进程A判断智能卡内是否已保存有预设参数;
本发明实施例中,约定预设参数存放在智能卡存储区的文件ID为0xA008的私有文件中。如果该私有文件中已存在预设参数,则执行步骤207;如果该私有文件中不存在预设参数,则执行步骤205。
步骤205、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送生成随机数的指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤206、智能卡生成随机数,并将该随机数作为标识参数存储在智能卡中;
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内;在本发明实施例中,指定的私有文件的ID为0xA008。
步骤206执行完毕后继续执行步骤207。
步骤207、进程A从智能卡中读取标识参数;
进程A访问智能卡中文件ID为0xA008的私有文件,并读取其中的预设参数或者新保存的随机数。
步骤208、进程A通过调用函数RegisterWindowMessage(LPCTSTR lpString)获取函数的返回值,该返回值即为进程A要使用的消息ID;
具体地,函数RegisterWindowMessage(LPCTSTR lpString)中的参数是步骤207中所读取的标识参数。
步骤209、进程A获取到消息ID后,利用此消息ID和其他进程进行信息交互。
在本发明实施例中,步骤204-205还可以由步骤204’-205’来代替,即:如果步骤203中的验证结果表明PIN码正确,则执行步骤204’。
步骤204’、进程A向智能卡发送读取标识参数的指令;
步骤205’、智能卡判断是否保存有预设参数;
智能卡判断存储区中文件ID为0xA008的私有文件中是否保存有预设参数;如果有,则执行步骤207;如果没有,则执行步骤206。
为了保证进程间信息交互的安全性,本发明实施例在步骤201之前,还包括:
步骤200、在智能卡与主机连接后,启动主机上的初始化工具自动清除智能卡上保存的预设参数。
如果执行步骤200的话,则上述步骤204可以省去,即:如果步骤203中的验证结果表明PIN码正确,则执行步骤205。
或者,在本发明实施例在步骤201之前还包括:
步骤200’、在智能卡上电后自动生成动态参数,并以新生成的动态参数代替原有的预设参数。
在智能卡与主机连接后,智能卡的操作系统加电后自动生成随机数,并将该随机数替代原有的预设参数作为标识参数存储在智能卡中。
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内。在本发明实施例中,指定的私有文件的ID为0xA008。
如果执行步骤200’的话,则上述步骤204-206可以省去,即:如果步骤203中的验证结果表明PIN码正确,则执行步骤207。
本发明实施例提供的进程间信息交互的方法,在进程启动后获取进程消息ID的过程中,动态地获取信息交互通道的参标识数,然后根据该标识参数获取与之对应的消息ID,使得获取到的消息ID根据标识参数的变化而变化,增大了一个进程对应的消息ID被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例3
在标识参数存储在主机、且所述信息交互通道为消息ID的情况下,本发明实施例提供的通过动态消息ID实现进程间信息交互的方法,如图3所示,具体包括以下步骤:
步骤301、启动主机上的进程A;
步骤302、进程A向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤303、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤304;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤304、进程A判断主机注册表中是否存储有临时键值;
本发明实施例中,进程A访问主机注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\FTRANDOM,并判断是否存在id键对应的数据;
如果存在,则执行步骤311;如果不存在,则进行步骤305。
步骤305、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送的随机数生成指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤306、智能卡生成随机数;
在本发明实施例中,智能卡生成的随机数为“77CD5240B667BB76”。
步骤307、进程A对智能卡中新生成的随机数进行HASH(哈希)运算,生成随机数的HASH值;
步骤308、进程A生成RSA密钥对,并将该RSA密钥对中的私钥存储在智能卡中;
步骤309、进程A使用所述RSA密钥对中的公钥对步骤307中的HASH值做加密运算,得到加密结果;
步骤310、进程A创建注册表临时键值,并将所述加密结果作为标识参数存储在主机的注册表中;
具体地,进程A在主机注册表的HKEY_LOCAL_MACHINE\SOFTWARE\FTRANDOM下,创建id键,并设置该id键的数据为步骤309中的加密结果。
步骤310执行完毕后,跳转到步骤315。
步骤311、进程A读取主机注册表中存储的临时键值;
步骤312、进程A判断智能卡中是否存储有RSA私钥;
如果有,则执行步骤313;如果没有,则执行步骤305。
步骤313、进程A调用智能卡中存储的RSA私钥;
步骤314、进程A利用RSA私钥对步骤311中读取的临时键值进行解密,获取解密后的数据;
步骤315、进程A调用函数RegisterWindowMessage(LPCTSTR lpString)获取函数的返回值,该返回值即为进程A要使用的消息ID;
具体地,函数RegisterWindowMessage(LPCTSTR lpString)中参数是步骤314中获取的解密后的数据,或者是步骤307中生成的随机数的HASH值。
步骤316、进程A获取到消息ID后,利用此消息ID和其他进程进行信息交互。
以上步骤编码并不用于限定本发明实施例各步骤间的先后顺序,具体实现过程可根据实际需要进行调整。
本发明实施例提供的进程间信息交互的方法,在进程启动后获取进程消息ID的过程中,动态地获取信息交互通道的标识参数,然后根据该标识参数获取与之对应的消息ID,使得获取到的消息ID根据标识参数的变化而变化,增大了一个进程对应的消息ID被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例4
在标识参数存储在智能卡、且所述信息交互通道为窗口标题的情况下,本发明实施例提供的通过动态窗口标题实现进程间信息交互的方法,首先创建进程A的动态窗口,与进程A进行通信的进程B则需要获取进程A的窗口句柄从而与进程A进行信息交互;如图4所示,具体包括以下步骤:
步骤401、启动主机上的进程A;
步骤402、进程A向智能卡发送验证用户身份的指令,具体为验证PIN码的指令;
在本发明实施例中,验证用户PIN码的指令APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤403、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤404;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤404、进程A判断智能卡内是否已保存有预设参数;
本发明实施例中,约定预设参数存放在智能卡存储区的文件ID为0xA008的私有文件中。
如果该私有文件中已存在预设参数,则执行步骤407;如果该私有文件中不存在预设参数,则执行步骤405。
步骤405、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送生成随机数的指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤406、智能卡生成随机数,并将该随机数作为标识参数保存在指定的私有文件中;
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内;在本实施例中,指定的私有文件的ID为0xA008。
步骤406执行完毕后继续执行步骤407。
步骤407、进程A访问保存有标识参数的私有文件,并读取预设参数;
具体地,进程A访问智能卡中文件ID为0xA008的私有文件,并读取到其中的预设参数或者新保存的随机数“77CD5240B667BB76”。
步骤408、进程A根据所述标识参数调用窗口创建函数,来创建进程A的窗口;
在本发明实施例中,进程A调用以下窗口创建函数
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam
)
来创建进程A的窗口;其中,该函数中的参数lpWindowName是进程A访问智能卡中指定的私有文件所读取到的标识参数;
另外,在本发明实施例中,步骤408中进程A调用窗口函数,创建进程A的窗口的过程还可以通过以下窗口创建函数来实现:
HWND CreateWindowEx(DWORDdwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
)
其中,该函数中的参数lpWindowName同样是进程A访问智能卡中指定的私有文件所读取到的标识参数。
步骤409、启动需要对进程A的窗口进行操作的进程B;
步骤410、进程B向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤411、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤412;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程B退出。
步骤412、进程B访问智能卡中文件ID为0xA008的私有文件,并读取智能卡内保存的标识参数;
步骤413、进程B根据所述标识参数调用窗口查找函数来获取要操作窗口的句柄。
在本发明实施例中,进程B调用以下窗口查找函数:
static CWnd*PASCAL FindWindow(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName),
该函数中的参数lpszWindowName是在步骤412中进程B所读取到的标识参数,通过调用该函数,进程B获取到的返回值为要操作窗口的窗口句柄,即进程A新建窗口的窗口句柄;
在本发明实施例中,步骤413中调用窗口查找函数获取进程A新建窗口的窗口句柄的过程还可以通过以下窗口查找函数来实现:
static CWnd*FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
)
其中,该函数中的参数lpszWindow同样是在步骤412中进程B访问智能卡中指定的私有文件所读取到的标识参数。
步骤414、进程B获取到进程A的窗口句柄后,对进程A的窗口进行操作。
在本发明实施例中,步骤404-405还可以由步骤404’-405’来代替,即:如果步骤403中的验证结果表明PIN码正确,则执行步骤404’。
步骤404’、进程A向智能卡发送读取标识参数的指令;
步骤405’、智能卡判断是否保存有预设参数;
智能卡判断存储区中文件ID为0xA008的私有文件中是否保存有预设参数;如果有,则执行步骤407;如果没有,则执行步骤406。
为了保证进程间信息交互的安全性,本发明实施例在步骤401之前,还包括:
步骤400、在智能卡与主机连接后,启动主机上的初始化工具自动清除智能卡上保存的预设参数。
如果执行步骤400的话,则上述步骤404可以省去,即:如果步骤403中的验证结果表明PIN码正确,则执行步骤405。
或者,本发明实施例在步骤401之前还包括:
步骤400’、在智能卡上电后自动生成动态参数,并以新生成的动态参数代替原有的预设参数。
在智能卡与主机连接后,智能卡的操作系统加电后自动生成随机数,并将该随机数替代原有的预设参数作为标识参数存储在智能卡中。
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内。在本发明实施例中,指定的私有文件的ID为0xA008。
如果执行步骤400’的话,则上述步骤404-406可以省去,即:如果步骤403中的验证结果表明PIN码正确,则执行步骤407。
以上步骤编码并不用于限定本发明实施例各步骤间的先后顺序,具体实现过程可根据实际需要进行调整。
本发明实施例提供的进程间信息交互的方法,在进程启动后动态地获取标识参数,然后根据该标识参数创建与之对应的动态窗口,然后需要对该窗口进行操作的进程会根据所述标识参数查找到所述动态窗口的窗口标题,从而实现进程间的信息交互,由于动态的窗口标题根据标识参数的变化而变化,增大了一个进程对应的窗口标题被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例5
在标识参数存储在智能卡、且所述信息交互通道为有名管道(FIFO,First InFirst Out)的情况下,本发明实施例提供的Linux系统下通过动态的有名管道实现进程间信息交互的方法,如图5所示,具体包括以下步骤:
步骤501、启动主机上的进程A;
步骤502、进程A向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤503、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤504;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤504、进程A判断智能卡内是否已保存有预设参数;
本发明实施例中,约定预设参数存放在智能卡存储区的文件ID为0xA008的私有文件中。
如果该私有文件中已存在预设参数,则执行步骤507;如果该私有文件中不存在预设参数,则执行步骤505。
步骤505、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送生成随机数的指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤506、智能卡生成随机数,并将该随机数作为标识参数存储在智能卡中;
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内;在本发明实施例中,指定的私有文件的ID为0xA008。
步骤506执行完毕后继续执行步骤507。
步骤507、进程A从智能卡中读取标识参数;
进程A访问文件ID为0xA008的私有文件,并读取其中的预设参数或者新保存的随机数。
步骤508、判断是否存在与所读取的标识参数对应的有名管道(FIFO);
如果存在,则执行步骤509和511;如果不存在,则执行步骤510和511。
步骤509、进程A打开与所述标识参数对应的FIFO;
在本发明实施例中,进程A调用Open函数打开FIFO,参数为进程A所读取的标识参数。
步骤510、进程A根据所述标识参数创建FIFO;
在本发明实施例中,进程A调用函数int mkinfo(const char*pathname,mode_tmode)来创建FIFO,其中参数pathname是进程A所读取的标识参数;具体地,进行FIFO创建的函数为:
mkinfo(“77CD5240B667BB76”,0666)
步骤511、进程A通过FIFO与其他进程进行信息交互。
在本发明实施例中,步骤504-505还可以由步骤504’-505’来代替,即:如果步骤503中的验证结果表明PIN码正确,则执行步骤504’。
步骤504’、进程A向智能卡发送读取标识参数的指令;
步骤505’、智能卡判断是否保存有预设参数;
智能卡判断存储区中文件ID为0xA008的私有文件中是否保存有预设参数;如果有,则执行步骤507;如果没有,则执行步骤506。
为了保证进程间信息交互的安全性,本发明实施例在步骤501之前,还包括:
步骤500、在智能卡与主机连接后,启动主机上的初始化工具自动清除智能卡上保存的预设参数。
如果执行步骤500的话,则上述步骤504可以省去,即:如果步骤503中的验证结果表明PIN码正确,则执行步骤505。
或者,本发明实施例在步骤501之前还包括:
步骤500’、在智能卡上电后自动生成动态参数,并以新生成的动态参数代替原有的预设参数。
在智能卡与主机连接后,智能卡的操作系统加电后自动生成随机数,并将该随机数替代原有的预设参数作为标识参数存储在智能卡中。
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内。在本发明实施例中,指定的私有文件的ID为0xA008。
如果执行步骤500’的话,则上述步骤504-506可以省去,即:如果步骤503中的验证结果表明PIN码正确,则执行步骤507。
本发明实施例提供的进程间信息交互的方法,在进程启动后动态地获取标识参数,然后根据该标识参数打开或者创建与之对应的有名管道,从而实现进程间的信息交互,由于有名管道根据标识参数的变化而变化,增大了一个进程对应的有名管道被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例6
在标识参数存储在智能卡、且所述信息交互通道为共享内存的情况下,本发明实施例提供的Linux系统下通过动态的共享内存实现进程间信息交互的方法,如图6所示,具体包括以下步骤:
步骤601、启动主机上的进程A;
步骤602、进程A向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤603、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤604;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤604、进程A判断智能卡内是否已保存有预设参数;
本发明实施例中,约定预设参数存放在智能卡存储区的文件ID为0xA008的私有文件中。
如果该私有文件中已存在预设参数,则执行步骤607;如果该私有文件中不存在预设参数,则执行步骤605。
步骤605、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送生成随机数的指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤606、智能卡生成随机数,并将该随机数作为标识参数存储在智能卡中;
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内;在本发明实施例中,指定的私有文件的ID为0xA008。
步骤606执行完毕后继续执行步骤607。
步骤607、进程A从智能卡中读取标识参数;
进程A访问智能卡中文件ID为0xA008的私有文件,并读取其中的预设参数或者新保存的随机数。
步骤608、进程A将所读取的标识参数转换成key_t类型的数据;
本发明实施例中,步骤608的具体实现方法如下:
key_t key=StringToKey(strName)
其中,参数strName为进程A读取到的预设参数。
步骤609、进程A尝试打开与所述key_t类型数据对应的共享内存;
在本发明实施例中,进程A通过调用共享内存打开函数来尝试打开想要操作的共享内存;如果尝试打开的操作成功,则执行步骤611;如果尝试打开的操作失败,则执行步骤610和611。
步骤610、进程A根据所述key_t类型数据创建共享内存;
在本发明实施例中,进程A调用共享内存创建函数来完成共享内存的创建;共享内存创建函数类型为int shmget(key_t key,int size,int flags);其中参数key是步骤608所得的数据,size是需创建的共享内存的大小。
本发明实施例中,创建共享内存的过程具体实现代码如下:
m_hFileMapping=shmget(key,0,IPC_EXCL|S_IRUSR|S_IRGRP|
S_IWUSR|S_IWGRP|S_IROTH|S_IWOTH);
if(IPC_INVALUE_HANDLE==m_hFileMapping)
{
m_hFileMapping=shmget(key,ulSize,IPC_CREAT|IPC_EXCL|
SVSHM_MODE);
}
步骤611、进程A通过共享内存与其他进程进行信息交互。
在本发明实施例中,步骤604-605还可以由步骤604’-605’来代替,即:如果步骤603中的验证结果表明PIN码正确,则执行步骤604’。
步骤604’、进程A向智能卡发送读取标识参数的指令;
步骤605’、智能卡判断是否保存有预设参数;
智能卡判断存储区中文件ID为0xA008的私有文件中是否保存有预设参数;如果有,则执行步骤607;如果没有,则执行步骤606。
为了保证进程间信息交互的安全性,本发明实施例在步骤601之前,还包括:
步骤600、在智能卡与主机连接后,启动主机上的初始化工具自动清除智能卡上保存的预设参数。
如果执行步骤600的话,则上述步骤604可以省去,即:如果步骤603中的验证结果表明PIN码正确,则执行步骤605。
或者,在本发明实施例在步骤601之前还包括:
步骤600’、在智能卡上电后自动生成动态参数,并以新生成的动态参数代替原有的预设参数。
在智能卡与主机连接后,智能卡的操作系统加电后自动生成随机数,并将该随机数替代原有的预设参数作为标识参数存储在智能卡中。
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内。在本发明实施例中,指定的私有文件的ID为0xA008。
如果执行步骤600’的话,则上述步骤604-606可以省去,即:如果步骤603中的验证结果表明PIN码正确,则执行步骤607。
本发明实施例提供的进程间信息交互的方法,在进程启动后动态地获取标识参数,然后根据该标识参数打开或者创建与之对应的共享内存,从而实现进程间的信息交互,由于共享内存根据标识参数的变化而变化,增大了一个进程对应的共享内存被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例7
在标识参数存储在智能卡、且所述信息交互通道为共享内存的情况下,本发明实施例提供的Windows系统下通过动态的共享内存实现进程间信息交互的方法,如图7所示,具体包括以下步骤:
步骤701、启动主机上的进程A;
步骤702、进程A向智能卡发送验证用户身份的指令,具体为验证用户PIN码的指令;
在本发明实施例中,验证用户PIN码的指令为APDU指令,具体为:
APDU apdu(0x00,0x20,0x00,0x00,8,“12345678”)
其中“12345678”为用户的PIN码。
步骤703、智能卡验证用户的PIN码是否正确;
如果验证结果表明PIN码正确,说明用户为合法用户,则执行步骤704;如果验证结果表明PIN码不正确,说明用户为不合法用户,则进程A退出。
步骤704、进程A判断智能卡内是否已保存有预设参数;
本发明实施例中,约定预设参数存放在智能卡存储区的文件ID为0xA008的私有文件中。
如果该私有文件中已存在预设参数,则执行步骤707;如果该私有文件中不存在预设参数,则执行步骤705。
步骤705、进程A向智能卡发送生成随机数的指令;
在本发明实施例中,进程A向智能卡发送生成随机数的指令为APDU指令,具体为:
APDU apdu(0x00,0x84,0x00,0x00,0x08)
步骤706、智能卡生成随机数,并将生成的随机数作为标识参数保存在指定的私有文件;
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内;在本发明实施例中,指定的私有文件的ID为0xA008。
步骤706执行完毕后继续执行步骤707。
步骤707、进程A从智能卡中读取标识参数;
进程A访问智能卡中文件ID为0xA008的私有文件,并读取其中的预设参数或者新保存的随机数。
步骤708、进程A尝试打开与所读取的标识参数对应的共享内存;
在本发明实施例中,进程A通过调用如下函数来打开共享内存:
HANDLE OpenFileMapping(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
LPCTSTR lpName
)
其中参数LPCTSTR lpName是进程A所读取的标识参数;如果上述函数执行完成后的返回值为NULL,说明进程A尝试打开共享内存的操作失败,参数LPCTSTR lpName对应的共享内存不存在,则执行步骤709、710;否则,上述函数执行完成后的返回值即为进程A所要操作的共享内存的句柄,进而执行步骤710。
步骤709、进程A根据所读取的标识参数创建共享内存;
在本发明实施例中,进程A通过调用如下函数来创建共享内存:
HANDLE CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
)
其中参数LPCTSTR lpName是进程A所读取的预设参数。
步骤710、进程A通过共享内存与其他进程进行信息交互。
在本发明实施例中,步骤704-705还可以由步骤704’-705’来代替,即:如果步骤703中的验证结果表明PIN码正确,则执行步骤704’。
步骤704’、进程A向智能卡发送读取标识参数的指令;
步骤705’、智能卡判断是否保存有预设参数;
智能卡判断存储区中文件ID为0xA008的私有文件中是否保存有预设参数;如果有,则执行步骤707;如果没有,则执行步骤706。
为了保证进程间信息交互的安全性,本发明实施例在步骤701之前,还包括:
步骤700、在智能卡与主机连接后,启动主机上的初始化工具自动清除智能卡上保存的预设参数。
如果执行步骤700的话,则上述步骤704可以省去,即:如果步骤703中的验证结果表明PIN码正确,则执行步骤705。
或者,本发明实施例在步骤701之前还包括:
步骤700’、在智能卡上电后自动生成动态参数,并以新生成的动态参数代替原有的预设参数。
在智能卡与主机连接后,智能卡的操作系统加电后自动生成随机数,并将该随机数替代原有的预设参数作为标识参数存储在智能卡中。
在本发明实施例中,智能卡生成随机数“77CD5240B667BB76”,并将生成的随机数作为标识参数保存在智能卡指定的私有文件内。在本发明实施例中,指定的私有文件的ID为0xA008。
如果执行步骤700’的话,则上述步骤704-706可以省去,即:如果步骤703中的验证结果表明PIN码正确,则执行步骤707。
本发明实施例提供的进程间信息交互的方法,在进程启动后动态地获取标识参数,然后根据该标识参数打开或者创建与之对应的共享内存,从而实现进程间的信息交互,由于共享内存根据标识参数的变化而变化,增大了一个进程对应的共享内存被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例8
如图8所示,本发明实施例提供的实现进程间信息交互的装置,包括获取单元81、访问单元82及通信单元83;其中,
获取单元81,用于获取信息交互通道的动态参数作为标识参数;访问单元82,用于根据获取单元81获取到的标识参数访问信息交互通道,所述标识参数可以是消息ID、窗口标题、共享内存的名字、或者有名管道的名字;通信单元83,用于通过所述信息交互通道进行进程间的信息交互。
本发明实施例提供的实现进程间信息交互的装置,在进程启动后确定信息交互通道的过程中,获取信息交互通道的标识参数,该标识参数可以是预设参数也可以是新生成的动态参数,然后根据该标识参数访问信息交互通道,使得信息交互通道根据标识参数的变化而变化,增大了一个进程对应的信息交互通道被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
实施例9
如图9所示,本发明实施例提供的实现进程间信息交互的装置,包括获取单元91、访问单元92、通信单元93及验证单元94;其中,
首先,验证单元94指令智能卡验证用户是否为合法用户;如果用户为合法用户,则获取单元91执行获取信息交互通道的动态参数作为标识参数的操作;如果用户为不合法用户,则结束进程;
之后,访问单元92根据获取单元91获取到的标识参数访问信息交互通道,所述标识参数可以是消息ID、窗口标题、共享内存的名字、或者有名管道的名字;通信单元93通过访问单元92访问的信息交互通道进行进程间的信息交互。
其中,所述访问单元92进一步包括:
判断模块921、用于判断是否存在与所述标识参数对应的信息交互通道;
打开模块922,用于在判断模块921判断结果为是时,打开所述信息交互通道;
通道创建模块923,用于在判断模块921判断结果为否时,以所述标识参数为通道名称创建新的信息交互通道。
此外,本发明实施例提供的实现进程间信息交互的装置,还包括:判断单元95,用于判断是否存在信息交互通道的预设参数;如果存在,则获取单元91用于获取信息交互通道的预设参数;如果不存在,则获取单元91用于获取信息交互通道的动态参数。
在存在预设参数的情况下,所述获取单元91直接读取已存的信息交互通道的预设参数,所述预设参数存储在主机中或者信息安全设备中;如果所述预设参数存储在主机中,则所述获取单元91还对所读取到的信息交互通道的预设参数进行解密,并将解密后得到的数据作为标识参数,此时所述访问单元92根据解密后得到的数据访问信息交互通道。
在预设参数不存在的情况下,就需要通过所述获取单元91得到信息交互通道的动态参数,此时所述获取单元91具体包括:
参数创建模块911,用于创建信息交互通道的动态参数,该动态参数可以是随机数,也可以是对随机数进行HASH(哈希)运算后得到的HASH值;
存储模块912,用于将所述动态参数存储到主机中或者信息安全设备中;
读取模块913,用于读取所述动态参数作为标识参数。
其中,如果所述动态参数为随机数,则所述存储模块912将所述随机数存储到信息安全设备中;
如果所述动态参数为随机数的HASH值,则所述存储模块912还需对所述随机数的HASH值进行加密,将加密后的数据存储到主机中。
此外,本发明实施例中的获取单元91还可以获取信息安全设备中新生成的动态参数作为标识参数;其中,所述新生成的动态参数由信息安全设备在上电后自动生成。
本发明实施例提供的实现进程间信息交互的装置,在进程启动后确定信息交互通道的过程中,获取信息交互通道的标识参数,该标识参数可以是预设参数也可以是新生成的动态参数,然后打开与所述标识参数对应的信息交互通道或者根据该标识参数创建新的信息交互通道,使得信息交互通道根据标识参数的变化而变化,增大了一个进程对应的信息交互通道被其他进程截获的难度,从而实现了动态的信息交互通道,提高了进程间进行信息交互时的安全性。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。