### 对用户密码进行加密和解密

在开发应用程序时，有些用户数据是保密的，不能够外泄。对于一些保密的数据，我们通常需要对数据进行加密存储，防止信息外泄。对数据进行加密后，外界只能够看到加密后的密文信息，这些信息通常是凌乱没有实际意义的，只有利用对应的解密算法对其进行解密之后翻译成明文，才恢复为原来的有用信息。图 1 描述了数据加密的全过程。

图 1 数据加密

图 2 描述了数据解密的全过程。

图 2 数据解密

对数据的加密和解密最核心的内容就是加密和解密的算法。加密和解密算法有很多种，其中比较著名的有 MD5、DES、RSA、IDEA 等。当然，我们也可以设计自己的加密和机密算法。在本例中我们设计一个简单的加密和解密算法。对指定的用户密码进行加密，输出密文，然后对密文进行解密，输出明文。

我们的加密算法比较简单，对字符串中的每一个字符按照它的索引位置进行加密，即第一个字符不变，因为它的索引位置为 0，第 2 个字符数据加 1，第 3 个字符数据加 2…。图 3 显示了解密的过程。

图 3 数据加密算法

解密的过程与其相反，将字符串中每一个字符减去它的索引位置就可以了。下面我们介绍实例的设计过程。

（1）设计一个控制台应用程序。

（2）添加一个 Encrypt 函数，实现信息的加密。

bool Encrypt(char szText[])

{

char *pszItem = szText;

int nLen = strlen(szText);

for(int i=0; i<nLen; i++)

{

szText[i] += i;

}

return true;

}

（3）添加 Decrypt 函数实现信息解密。

（4）在 main 函数中定义一个字符串，调用 Encrypt 函数对字符串进行加密，调用 Decrypt 函数对加密的密文进行解密。

int main(int argc, char* argv[])

{

char szPassword[] = "mingribccd";

Encrypt(szPassword);

cout << "密文: " << szPassword << endl;

Decrypt(szPassword);

cout << "明文: " << szPassword << endl;

return 0;

}

实例运行效果如图 4 所示。

图 4 运行结果