C++加密bmp图片程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++加密bmp图片程序相关的知识,希望对你有一定的参考价值。
C++加密bmp图片,步骤是哪些?应该先理顺什么关系 网上查的看不懂 怎么读取图片能变成二进制存储在文件或者数组里?有没有有注解的代码可以参考?
可以随意用种方法加密阿
先把bmp文件读到缓存
然后用aes算法加密缓存
再把缓存写入文件
例如,用crypto++库:
std::string encrypt(const std::string_t &source) constbyte key_buffer[ CryptoPP::AES::DEFAULT_KEYLENGTH ];
byte iv[ CryptoPP::AES::BLOCKSIZE ];
memset(key_buffer, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
memcpy(key_buffer, key_.c_str(), key_.size());
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
CryptoPP::AES::Encryption aes_encryption(key_buffer,
CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption cbc_encryption(aes_encryption,
iv);
std::string encrypted_text;
CryptoPP::StreamTransformationFilter encryptor(cbc_encryption,
new CryptoPP::StringSink(encrypted_text));
encryptor.Put(reinterpret_cast<const unsigned char*>(source.data()),
source.size());
encryptor.MessageEnd();
return encrypted_text;
追问
额 这个 不懂 。。。。
追答各种各样的方法,例如用流来实现:
std::ifstream ifs;ifs.open (name.c_str(), std::ios::binary);
ifs.unsetf(std::ios_base::skipws);
if (ifs.good())
std::stringstream buffer;
buffer << ifs.rdbuf();
std::string contents(buffer.str());
else
throw(std::runtime_error("File could not be opened for read: " + name));
追问
好吧 弱弱的说句 都写在这个份上了 帮把读取的写全行不 菜鸟理解慢 能加个备注不 不行就算了 还是很谢谢的
追答用ifstream流的open打开文件
用rdbuf读取文件数据到stringstream里
然后把stringstream里的数据转换成字符串
然后你可以对字符串进行加密
写入文件的操作类似,就是反一反
当然你也可以换种方式读写文件,差不多的
C++:使用 fread 和 fwrite 循环复制 bmp,导致输出 bmp 填充输入 bmp 中第一个颜色
【中文标题】C++:使用 fread 和 fwrite 循环复制 bmp,导致输出 bmp 填充输入 bmp 中第一个颜色【英文标题】:C++: copying bmp using loop of fread and fwrite, casues output bmp is filled with color of the fisrt one in input bmp 【发布时间】:2009-12-10 21:28:48 【问题描述】:我不知道为什么,但第一个像素(左下角)加载正确,但其他像素不会加载,第一个颜色用于整个图片...
我有这个循环
fread(&pix,sizeof(pix),1,pictureIn);
fwrite(&pix,sizeof(pix),1,pictureOut);
编辑:
pix 是三个无符号字符(rgb)的结构,加载文件和信息头似乎没问题
【问题讨论】:
您没有提供足够的信息。什么是像素?你怎么知道大小? 您是否真的检查了返回值,以便判断是否出现问题? 大概你打开了一个文件?你是怎么做到的?例如,您是否以二进制模式打开它?这是一个循环吗?你明白了——我们不是读心术的人。 【参考方案1】:您使用的是什么操作系统?我最近在 Win32 下读取二进制文件时遇到问题。原来我忘了给fopen传“b”标志:
pictureIn = fopen ("in.bmp", "rb");
pictureOut = fopen ("out.bmp", "wb");
【讨论】:
以上是关于C++加密bmp图片程序的主要内容,如果未能解决你的问题,请参考以下文章