SpaceCrypto:一个简单的 Crypto++ 包装器。
为了简单地加密/解密您的数据...
引言
这个库可以帮助您使用 Crypto++ 以非常简单的方式开发您的应用程序。它允许对 C++ 只有最基本了解的开发人员快速使用加密库!
我的想法是帮助新的 Crypto++ 程序员避免花费时间阅读 Crypto++ 手册,并将所有 Crypto++ 函数适配到 C++ 标准 string
类型。
Using the Code
SpaceCrypto
命名空间分为两个类:Crypt
和 Hash
。第一个类允许您使用最常用的方法(AES、Twofish、DES等)使用 C++ string
类型 (std::string
) 快速执行加密/解密操作。第二个类执行哈希加密 (SHA, MD5, ...)。
Crypto 类用法
现在我们准备好使用这个封装器了。你需要声明的第一个是 SpaceCrypto
命名空间中 Crypt
类的一个实例。您可以使用预定义的 typedef
之一,其中包含大多数常用算法(AES、Blowfish、DES等),或者在类型名称中指定另一种加密算法。
注意:在后一种情况下,您需要包含该算法的库并在类型名称中指定它。
#include "cryptopp560\rc6"
...
SpaceCrypto::Crypt<CryptoPP::RC6> hi;
声明 Crypt
类的实例后,您必须设置明文、密钥,以及可选的 IV。函数参数是不言自明的。请记住,您必须指定传入的 string
格式类型(HEX 或 normal),否则它将自动转换为 normal 输入。您还可以指定输出类型(setInputMode
和 set OutputMode
)。当您准备好加密(或解密)您的 string
时,您需要调用 Encrypt()
(或 Decrypt()
)方法。这将返回您处理过的 string
。
错误处理
getStatus()
将返回一个布尔值,表示obj
的当前状态 (true
= 错误;false
= 没有错误)getErrorMsg()
将返回一个string
,指示当前错误消息
您一次只能执行一个加密/解密函数。要使用相同的 Crypto 对象执行另一个加密操作,您需要调用 reset()
函数。这是一个安全原因,但它还有另一个解释... 当您第一次调用 Encrypt
函数(或 Decrypt
)时,obj
会加密所有数据。因此,如果您再次调用 Encrypt
函数(以检索另一个编码的 string
),它不会再次调用 Crypto++ 加密函数,而只是返回已经编码的 string
。
安全建议:因此,我强烈建议您在转换后立即调用 reset()
函数,如果您不需要再次调用其他函数,因为纯文本 string
和纯文本密钥将保留在 RAM 中,直到您删除该对象!
Hash 类用法
哈希函数的工作方式与 crypto 类类似,但有一些例外
- 请记住,哈希函数是单向的,因此您无法检索回
string
。 Hash
类提供了addStr
函数,允许您向纯文本string
添加一些文本。
类用法(示例)
#include "cryptopp_wrapper.h"
int main()
{
...
cout<<"Space Wrapper TEST!"<<endl<<endl;
SpaceCrypto::CryptBlowFish hello;
hello.setPlainString("HelloWorld!");
hello.setKey("mySecUreKey!!");
std::string crypt;
crypt = hello.Encrypt();
cout<<"Plain Text: HelloWorld!"<<endl;
cout<<"Crypt Text: "<<crypt<<endl;
hello.reset();
hello.setEncString(crypt);
hello.setInputMode(SpaceCrypto::HEX);
hello.setKey("mySecUreKey!!");
hello.setOutputMode(SpaceCrypto::NORMAL);
cout<<"Decrypted Text: "<<hello.Decrypt()<<endl;
}
链接错误
如果没有包含 cryptopp 库,SpaceCrypto
无法编译。因此,在编译之前,请阅读以下内容
- 从 这里 下载并提取 cryptopp 库。
- 通过打开 "cryptlib.dsp" 项目编译 cryptopp
static
库,并将生成的库包含在您的项目(在链接器选项中)。 - 在您的项目中插入 cryptopp include 文件夹(主目录)。
重要建议
- 您必须在您的项目中包含 cryptlib.lib 才能编译您的代码。
- 这是一个简单的类,可以帮助程序员编写简单的代码。如果您需要更复杂的东西,您不能使用该类。如果您需要高级功能......您必须学习 Crypto++。
- Predef IV 初始化为 "0";如果您想更改它,您可以编辑
initializeIV
函数。
待办事项
- 更好的错误-异常
历史
- 2010/07/06 - 在 zip 文件中添加了一个示例,教程已修改
- 2010/06/26 -
SpaceCrypto
v.1.0.0 发布 - 2010/09/20 - 更新了源代码