什么方法/算法/库可以安全地加密然后解密
What method/algorithm/library can securely encrypt then decrypt
下面的项目是用WinAPI在c++中完成的,对于加密/编码,我使用的是cryptoc++,但我对更好的库开放。我需要加密/编码电子邮件数据,传输它,然后在另一端解密它,以便特权用户可以阅读电子邮件。
我最初的想法只是使用我的密钥(例如"MYKEY")使用SHA256加密电子邮件文本。但我想我还没有完全理解哈希是什么。我知道用SHA256或MD5或AES加密的字符串是不可能解密的,但我认为,如果我用我的特殊密钥("MYKEY")加密字符串,那么只要我知道特殊密钥,我就可以解密它。对吗?
如果不是,你能建议一个库,算法或方法,我可以用它来实现我的任务加密/编码电子邮件文本&只有当我有一个密钥或一些共享密钥允许我解密数据时才能解密它?
正如长颈鹿船长所说,散列算法不是加密算法(尽管它们都被计算在对称加密领域)。一个好的散列函数没有办法恢复符合生成的散列的消息(除了尝试所有可能的消息,看看它们是否给出相同的散列)。(此外,哈希函数的输出大小是固定的,但输入大小是可变的,这意味着有许多消息给出相同的哈希值。即使找到一对给出相同哈希值的消息,或者找到一个给定哈希值的消息,也应该很难。
你需要一个加密算法。非对称加密(使用公钥加密,私钥解密)很可能是一个好主意。
不要发明新的加密数据格式或协议。你会犯错误,这会使你的产品不安全。
对于电子邮件加密,使用OpenPGP (RFC 4880)或S/MIME (RFC 3851),或其中之一的某些子集。
你可以使用任何支持必要算法的库,或者一些专门支持这些文件格式的库。
SHA256和MD5是单向函数。也就是说,没有解密。参见哈希http://en.wikipedia.org/wiki/Cryptographic_hash_function。
但是,在尝试创建安全通信之前,您确实需要仔细阅读加密程序。
话虽如此,维基百科有一篇文章专门介绍实现http://en.wikipedia.org/wiki/AES_implementations
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- AES加密到解密未正确输出
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- boost::asio如何生成多个协同程序,然后加入它们
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 在std::thread中,joinable()然后join()线程安全吗
- C++:如何读取分离变量,然后读取向量
- 加密++验证大文件签名
- 通过 Openssl 命令行加密,通过 c++ 解密
- 如何在加密++中将两个源组合成新的源
- 为什么我的递归函数按降序打印,然后按升序打印?
- 等待整个 omp 块完成,然后再调用第二个函数
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 将加密消息从 php 发送到 C++ 应用程序,然后使用 CryptoPP 进行解密
- Qt C++ 如何将加密文本的QByteArray保存到文件中,然后读取并格式化为QByteArray
- 加载在JSBN中创建的RSA公钥,然后加密消息
- 尝试读取文本文件,使用 XOR 对其进行加密,然后将其写入新的文本文件
- RSA 加密然后解密失败,并显示"oaep decoding error"
- 什么方法/算法/库可以安全地加密然后解密