UKEY通信各个应用的流程介绍--数据加解密

对原始数据的加解密操作,重点在密钥上,包括密钥存储位置,密钥句柄,加密算法,同时加密过程是否对数据进行分组加密。

流程上没什么好说的就是在设备中找到密钥,使用密钥进行加解密;或者导入相关密钥进行加解密。

1:明文导入密钥(获得密钥句柄)

ULONG  DEVAPI  SKF_SetSymmKey  (DEVHANDLE  hDev,  BYTE*  pbKey,  ULONG ulAlgID, HANDLE* phKey)

功能描述  设置明文对称密钥,返回密钥句柄。
参数  hDev  [IN]  设备句柄。
  pbKey  [IN]  指向会话密钥值的缓冲区。
  ulAlgID  [IN]  会话密钥算法标识。
  phKey  [OUT]  返回会话密钥句柄。

2:加密初始化,设置加密初始值,如初始向量等相关参数

ULONG DEVAPI SKF_EncryptInit (HANDLE hKey, BLOCKCIPHERPARAM EncryptParam)
功能描述  数据加密初始化。设置数据加密的算法相关参数。
参数  hKey  [IN]  加密密钥句柄。
  EncryptParam  [IN]  分组密码算法相关参数:初始向量、初始向量长度、填充方法、反馈值的位长度。

后面分为单组数据加密,分组数据加密;单组数据加密就是输入一组数据,加密函数内部进行分组然后加密;分组数据加密就要求使用加密函数者对数据首先按照数据包大小分包,然后再调用加密函数对每个数据包进行加密。

单组数据加密,调用加密函数即可得到加密后数据

3:ULONG DEVAPI SKF_Encrypt(HANDLE hKey, BYTE * pbData, ULONG ulDataLen,BYTE *pbEncryptedData, ULONG *pulEncryptedLen)
功能描述  单一分组数据的加密操作。用指定加密密钥对指定数据进行加密,被加密的数据只包含一个分组,加密后的密文保存到指定的缓冲区中。   SKF_Encrypt 只对单个分组数据进行加密,在调用 SKF_Encrypt 之前,必须调用 SKF_EncryptInit 初始化加密操作。 SKF_Encypt等价于先调用           SKF_EncryptUpdate 再调用 SKF_EncryptFinal。 

参数  hKey    [IN]  加密密钥句柄。
  pbData  [IN]  待加密数据。
  ulDataLen  [IN]  待加密数据长度。
  pbEncryptedData  [OUT]  加密后的数据缓冲区指针,可以为 NULL,用于获得加密后数据长度。
  pulEncryptedLen  [IN, OUT]  输入时表示结果数据缓冲区长度,输出时表示结果数据实际长度。

分组数据加密,调用数据加密函数后,最后一组要调用加数据密结束函数

3’:ULONG  DEVAPI  SKF_EncryptUpdate(HANDLE  hKey,  BYTE  *  pbData,  ULONG ulDataLen, BYTE *pbEncryptedData, ULONG *pulEncryptedLen)
功能描述  多个分组数据的加密操作。用指定加密密钥对指定数据进行加密,被加密的数据包含多个分组,加密后的密文保存到指定的缓冲区中。   SKF_EncryptUpdate 对多个分组数据进行加密,在调用 SKF_EncryptUpdate 之前,必须调用 SKF_EncryptInit 初始化加密操作;在调用   SKF_EncryptUpdate 之后,必须调用 SKF_EncryptFinal 结束加密操作。
参数  hKey    [IN]  加密密钥句柄。
  pbData  [IN]  待加密数据。
  ulDataLen  [IN]  待加密数据长度。
  pbEncryptedData  [OUT]  加密后的数据缓冲区指针。
  pulEncryptedLen  [OUT]  返回加密后的数据长度。

解密函数原理和加密函数原理相同,步骤也相同,这里不在赘述。

你可能感兴趣的:(信息安全UKEY,UKEY,加解密)