使用CryptoAPI加密邮件

【勇芳软件工作室】汉化HomePreviousNext

要加密消息,首先必须使用CryptGenKey功能生成会话密钥。进行此调用生成随机密钥并返回句柄,以便密钥可用于加密和解密数据。此时还要指定使用的加密算法。因为CryptoAPI不允许应用程序使用公钥算法来加密批量数据,所以您应该使用CryptGenKey调用指定一个对称算法,如RC2或RC4。

或者,如果应用程序需要加密消息,使得具有给定密码的任何人都可以解密数据,则应使用CryptDeriveKey功能将密码转换为适合加密的密钥。请注意,在这种情况下,调用此函数而不是CryptGenKey函数,并且不需要后续的CryptExportKey调用。

一旦生成密钥,可以使用CryptSetKeyParam功能设置密钥的额外加密属性。例如,该函数允许使用不同的密钥盐对文件的不同部分进行加密,并提供改变密钥的密码模式或初始化向量的方法。这些参数可用于使加密符合特定的数据加密标准。

使用CryptEncrypt 功能加密文件中的数据。CryptEncrypt函数接收在上一步中生成的会话密钥,并加密数据缓冲区。请注意,随着数据被加密,数据可能会被加密算法稍微扩展。应用程序负责记住加密数据的长度,以便以后可以给予CryptDecrypt功能适当的长度。

为了允许当前用户将来对数据进行解密,CryptExportKey功能用于将解密密钥保存为只能用用户私钥解密的加密形式(密钥blob)。该函数需要用户的密钥交换公钥,可以通过使用CryptGetUserKey功能获得。CryptExportKey函数将返回应用程序必须存储的密钥blob,以用于解密文件。

请注意,如果应用程序具有其他用户的证书(或公钥),则可以允许其他用户通过为其要访问的每个用户执行CryptExportKey呼叫来解密文件。返回的关键字块必须由应用程序存储,如上一步所示。