- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在读取图像,对其进行加密,然后对其进行解密。目标是最终循环并记录完成该过程所需的时间。目前我拥有的是读取文件,然后对其进行加密,加密,然后根据恢复的数据创建另一个文件。我不需要用解密的图片制作另一个文件。以前我一直在使用 StringSource
和 StringSink
,但这只适用于文本文件。我在 How to read an image to a string for encrypting Crypto++ 得到了一些帮助从并开始使用 FileSink
和 FileSource
。
FileSink
、StringSink
、FileSource
和 StringSource
之间到底有什么区别?
另外,在下面的例子中,为什么需要设置密码?以前我只是使用 StringSource
时,我的字符串密码没有被初始化,但现在我使用 FileSource
时,它需要被初始化才能工作。
int main(int argc, char* argv[])
{
AutoSeededRandomPool prng_blowfish;
SecByteBlock key_blowfish(Blowfish::DEFAULT_KEYLENGTH);
prng_blowfish.GenerateBlock(key_blowfish, key_blowfish.size());
byte iv_blowfish[Blowfish::BLOCKSIZE];
prng_blowfish.GenerateBlock(iv_blowfish, sizeof(iv_blowfish));
string ifilename = "sample_files/1MB.jpg";
string cipher = "1MB.enc";
string rfilename = "r1MB.jpg";
try
{
EAX<Blowfish>::Encryption e_blowfish;
e_blowfish.SetKeyWithIV(key_blowfish, key_blowfish.size(), iv_blowfish, sizeof(iv_blowfish));
std::ifstream ifile(ifilename.c_str(), ios::binary);
std::ifstream::pos_type size = ifile.seekg(0, std::ios_base::end).tellg();
ifile.seekg(0, std::ios_base::beg);
FileSource fs1(ifilename.c_str(), true, new AuthenticatedEncryptionFilter(e_blowfish, new FileSink(cipher.c_str())));
EAX<Blowfish>::Decryption d_blowfish;
d_blowfish.SetKeyWithIV(key_blowfish, key_blowfish.size(), iv_blowfish, sizeof(iv_blowfish));
FileSource fs2(cipher.c_str(), true, new AuthenticatedDecryptionFilter(d_blowfish, new FileSink(rfilename.c_str()), AuthenticatedDecryptionFilter::THROW_EXCEPTION));
}
catch (const Exception& ex)
{
cerr << ex.what() << endl;
}
return 0;
}
最佳答案
What exactly is the difference between FileSink, StringSink, FileSourcem StringSource.
Sources、Filters 和 Sinks 是 Crypto++ 管道设计的一部分。数据从源流出,经过过滤器转换,然后在汇点结束。
所有来源都可以互换。所有过滤器均可互换。所有水槽均可互换。例如,要在 StringSink
和 FileSink
之间切换,您需要提供带有 FileSink
的文件名。否则,它们的操作相同。作为另一个示例,您可以在 HexEncoder
和 Base64Encoder
之间切换而无需更改。作为最后一个示例,SocketSource
或 SocketSink
将需要 IP 地址和端口。可能需要(或可能不需要)更改的内容取决于对象。
有很多来源。来自 Source Class Reference :
文件源
字符串源
RandomNumberSource
WindowPipeSource
SocketSource
有许多过滤器。您正在使用其中的两个 - AuthenticatedEncryptionFilter
和 AuthenticatedDecryptionFilter
。来自 Filter Class Reference和 FilterWithBufferedInput Class Reference :
十六进制编码器
十六进制编码器
Base32Encoder
Base32解码器
Base64Encoder
Base64Encoder
默认加密器
DefaultEncryptorWithMAC
默认解密器
DefaultDecryptorWithMAC
StreamTransformationFilter
AuthenticatedEncryptionFilter
AuthenticatedDecryptionFilter
有许多水槽。来自 Sink Class Reference :
ArraySink
比特桶
RandomNumberSink
StringSink
文件接收器
SocketSink
有一些高级主题,但我认为它们目前不重要。例如,BufferedTransformation
的作用以及如果 Attachable
返回 true
意味着什么。答案是 Filters 和 Sinks 都是 BufferedTransformation
的,Attachable = true
意味着它是一个 Filter(否则它是一个 Sink)。
... in following example, why does cipher need to be set to something...
StringSource
和 StringSink
不需要任何东西,因为它只是内存中的字节数组。 FileSource
和 FileSink
需要一个文件名,而您正在使用 cipher
作为文件名。您必须提供文件名,因为对象与文件/流相关。如果您使用的是 SocketSource
或 SocketSink
,则需要提供 IP 地址和端口(更准确地说,是 socket_t
)。
这是来自 FileSource Class Reference 的 FileSource
构造函数.您正在代码中使用第三个构造函数。
FileSource (BufferedTransformation *attachment=NULL)
FileSource (std::istream &in, bool pumpAll, BufferedTransformation *attachment=NULL)
FileSource (const char *filename, bool pumpAll, BufferedTransformation *attachment=NULL, bool binary=true)
这是来自 FileSink Class Reference 的 FileSink
构造函数.您正在代码中使用第二个构造函数。
FileSink (std::ostream &out)
FileSink (const char *filename, bool binary=true)
关于c++ - FileSink、StringSink、Filesource、StringSource Crypto++ 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400054/
我正在尝试优化一个繁重的 Cython 函数。我正在根据以下教程进行分析 http://docs.cython.org/src/tutorial/profiling_tutorial.html .我的
我正在读取图像,对其进行加密,然后对其进行解密。目标是最终循环并记录完成该过程所需的时间。目前我拥有的是读取文件,然后对其进行加密,加密,然后根据恢复的数据创建另一个文件。我不需要用解密的图片制作另一
我在 Qt 中使用了 Crypto++ 库,因为在 CBC 模式下使用 AES 方法加密字符串并使用 StringSource 和 StringSink 来定义 input 和 output 字符串参
我是一名优秀的程序员,十分优秀!