轻松看懂的加解密系列(5) —— Windows平台下本地数据加密的新选择(附源码)

图-1

比较传统加解密API与数据保护API:

        如果你一路从本系列的开篇看到现在,你对于 Wincrypt APIs 所提供的 CryptEncryptCryptDecrypt 这组传统加解密API至少已经有了一定了解。这对API可以应用于广泛的加密场景,而且基本不依赖于用户的登录状态。它们还允许你在加密过程中选择不同的加密算法和模式,以满足特定的安全需求,从而可以更细致地控制加密操作。尤其值得注意的是,它们支持非对称加密,这意味着你可以使用公钥加密数据,只有私钥持有者才能解密,这在加密通信和数据传输方面非常有用。

        然而,事物通常具有两面性。从另一个角度来看,CryptEncryptCryptDecrypt 的分步操作不仅增加了使用的复杂性,而且由于步骤繁多,也为潜在黑客提供了更多的攻击机会。正如你所了解的,大多数情况下,Windows下的本地应用程序需要的用户场景仅仅是将数据加密并持久保存,然后在需要时解密并使用。因此,Windows提供了 CryptProtectDataCryptUnprotectData 这一组更便捷、更安全的数据保护接口,以满足这种常见需求。其特点如下:

  • 用户密钥保护:数据加密时使用用户的登录凭据,这意味着只有登录到系统特定帐户的用户才能解密数据。这有助于确保只有授权用户能够访问加密数据。
  • 便于直接使用:不需要管理密钥,因为它们直接与用户的登录凭据相关联。这意味着加解密接口直接使用当前用户的登录凭据操作加密的数据,而无需手动管理密钥。

        回顾一下,在使用 CryptEncryptCryptDecrypt 这组传统加解密API时,你需要选择密钥容器、密码学服务提供程序、加密类型等,还需要导出、导入和管理密钥。即使你尽量采用默认选项,也不能省略任何必要的步骤。而如今,加密和解密都可以一步完成,无需繁琐的密钥管理。这是因为操作系统视当前用户本身就是最可信的"凭据",而且系统能够自动处理这一切,所以程序连密钥都不需要管理了。因此,CryptProtectDataCryptUnprotectData 这一组API在需要将数据与用户关联的场景中,可以说是非常方便和高效的选择。

        总之,CryptProtectDataCryptUnprotectData 更适合于需要将数据保护与用户关联的场景,而 CryptEncryptCryptDecrypt 更适合需要更灵活的加密和密钥管理场景,尤其是在非用户关联的情况下。选择哪种API取决于你的具体安全需求。

实例串讲数据保护API:

CryptProtectData API是Windows操作系统提供的一个API函数,常用于本地应用程序,加密敏感数据以保护其机密性。

DPAPI_IMP BOOL CryptProtectData(
  [in]           DATA_BLOB                 *pDataIn,
  [in, optional] LPCWSTR                   szDataDescr,
  [in, optional] DATA_BLOB                 *pOptionalEntropy,
  [in]           PVOID                     pvReserved,
  [in, optional] CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
  [in]           DWORD                     dwFlags,
  [out]          DATA_BLOB                 *pDataOut
);
  • pDataIn: 要加密的数据,以 DATA_BLOB 结构(代码定义如下)传递,包括数据(以字节为单位)的指针和大小。其中 DATA_BLOB 结构是Windows API中常用的结构之一,用于表示一块二进制数据的内存块。它通常用于在加密、解密、数据传输和其他操作中传递和管理二进制数据。
typedef struct _DATA_BLOB {
  DWORD cbData;
  BYTE  *pbData;
} DATA_BLOB, *PDATA_BLOB;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值