函数des_decipher将一个64位的密文分组通过DES算法进行解密。同des_encipher一样,des_decipher实际通过调用des_main来完成解密任务,但这里direction需要设置为decipher。因此,des_decipher的工作方式同des_encipher一样,只是这里的子密钥需要以逆序的方式参与。具体来说,就是在des_main中,针对每一轮i(从0开始计数),参与计算的子密钥为subkeys数组中下标为(15-i)的元素。
des_decipher的时间复杂度为O(1),因为解密数据块中的所有步骤都可以在恒定的时间内完成。
示例1:数据加密的头文件(DES算法和RSA算法通用头文件)
/*encrypt.h*/ #ifndef ENCRYPT_H #define ENCRYPT_H /*在一个安全实现中,Huge 最少要400位10进制数字*/ typedef unsigned long Huge; /*为RSA公钥定义一个数据结构*/ typedef struct RsaPubKey_ { Huge e; Huge n; }RsaPubkey; /*为RSA私钥定义一个数据结构*/ typedef struct RsaPriKey_ { Huge d; Huge n; }RsaPriKey; /*函数声明*/ void des_encipher(const unsigned char *plaintext, unsigned char *ciphertext, const unsigned char *key); void des_decipher(const unsigned char *ciphertext, unsigned char *plaintext, const unsigned char *key); void rsa_encipher(Huge plaintext, Huge *ciphertext, RsaPubKey pubkey); void rsa_decipher(Huge ciphertext,Huge *plaintext, RsaPriKey prikey); #endif // ENCRYPT_H