C++加密bmp图片程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++加密bmp图片程序相关的知识,希望对你有一定的参考价值。

C++加密bmp图片,步骤是哪些?应该先理顺什么关系 网上查的看不懂 怎么读取图片能变成二进制存储在文件或者数组里?有没有有注解的代码可以参考?

可以随意用种方法加密阿

先把bmp文件读到缓存

然后用aes算法加密缓存

再把缓存写入文件



例如,用crypto++库:

std::string encrypt(const std::string_t &source) const
  byte 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里的数据转换成字符串
然后你可以对字符串进行加密
写入文件的操作类似,就是反一反
当然你也可以换种方式读写文件,差不多的

参考技术A opencv,一个处理图像文件的库,用vs2010加载后,就可以用里面的库文件,就像用matlab似得。

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图片程序的主要内容,如果未能解决你的问题,请参考以下文章

bmp格式转换PNG格式 c语言或c++编程

关于怎么用C++读取bmp图片

纯C++实现24位bmp格式图片的读取和修饰

C++ bmp图像添加水印及旋转水印

拓展名为bmp的图片无法显示

C++学习(三三四)BMP图片文件结构