什么方法/算法/库可以安全地加密然后解密

时间:2011-10-24 01:08:32

标签: c++ encryption cryptography

以下项目是使用WinAPI在C ++中完成的,用于加密/编码我使用的是CryptoC ++,但我对更好的库开放。我需要对电子邮件数据进行加密/编码,传输,然后在另一端解密,以便特权用户可以阅读电子邮件。

我最初的想法是使用我的密钥(例如“MYKEY”)使用SHA256加密电子邮件文本。但我想我并不完全明白什么是哈希。我知道用SHA256或MD5或AES加密的字符串是不可能解密的,但我认为如果我用我的特殊密钥(“MYKEY”)加密字符串,我就可以解密它,只要我知道特殊密钥。这是对的吗?

如果没有,您可以建议我可以使用的库,算法或方法来实现我的加密/编码电子邮件文本的任务。如果我有一个密钥或一些允许我解密数据的共享密钥,它只能解密吗?

2 个答案:

答案 0 :(得分:2)

正如长颈鹿队长所说,哈希算法不是加密算法(尽管它们都是在对称密码学领域中计算的)。好的散列函数无法恢复适合生成的散列的消息(除了尝试所有可能的消息以查看它们是否提供相同的散列)。 (而且,哈希函数具有固定大小的输出,但具有可变大小的输入,这意味着有许多消息提供相同的哈希。即使一对消息提供相同的哈希或消息仍然很难找到对于给定的哈希值。)

您需要加密算法。很可能是非对称加密(使用公钥加密,私钥解密)是一个好主意。

不要发明新的加密数据格式或协议。您将犯错,这会使您的产品不安全。

对于电子邮件加密,请使用OpenPGP(RFC 4880)或S / MIME(RFC 3851)或其中一个子集。

然后,您可以使用任何支持必要算法的库,或者某些支持这些文件格式的库。

答案 1 :(得分:1)

SHA256和MD5是单向函数。即没有解密。请参阅哈希http://en.wikipedia.org/wiki/Cryptographic_hash_function

但在尝试创建安全通信之前,您确实需要阅读加密过程。

据说维基百科有一篇专门讨论实施的文章http://en.wikipedia.org/wiki/AES_implementations