【问题标题】:file wont encrypt blowfish c++文件不会加密河豚c ++
【发布时间】:2015-09-24 00:45:19
【问题描述】:

您好,我想在 C++ 中使用河豚加密文件,但它根本不起作用。我从加密中只得到相同的内容。有人可以帮我吗?

char * memblock;
long size;
printf("init params");
ifstream file ("/encryptfile.txt", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
  size = file.tellg();
  memblock = new char [size];
  file.seekg (0, ios::beg);
  printf("init all of it");
  file.read (memblock, size);
  printf("read file");


}
else printf("Unable to open file");

long multipleSize = (size/8 +1)*8;

long paddingSize = size * multipleSize;

char * outMemBlock;
outMemBlock = new char[paddingSize];
memset(outMemBlock, 0, paddingSize);

CBlowFish objBlowFish((unsigned char*)"abcdefgh",8);
printf("make blowfish file");
objBlowFish.Encrypt((unsigned char*)memblock,(unsigned char*)outMemBlock,16000);
printf("encryption done");

ofstream myfile ("/encryptfile.txt");
 if (myfile.is_open())
 {
   myfile << outMemBlock;
   myfile.close();
 }
 else cout << "Unable to open file";

【问题讨论】:

  • 你需要再分解一下代码,哪里出错了?
  • 它不会给出任何错误,但我认为它在 objBlowfish.encrypt 上运行良好

标签: c++ encryption blowfish


【解决方案1】:

您似乎正在使用 ECB 模式,这是 description 的默认设置(假设我们谈论的是同一个库):

void Encrypt(unsigned char* buf, size_t n, int iMode=ECB);
void Decrypt(unsigned char* buf, size_t n, int iMode=ECB);

在同一页面上还描述了含义:

Encrypt() 函数的第一个变体用于应用指定操作模式对指定大小的数据块进行就地加密。块大小应为 8 的倍数。此功能可以在以下模式下运行:ECB、CBC 或 CFB。在 ECB 模式下,不使用链接。如果同一个块用相同的密钥加密两次,得到的密文块是一样的。

因此您应该改用 CBC 或 CFB 模式,并在构造函数中提供一个随机 IV(初始链接值称为 roChain):

CBlowFish(unsigned char* ucKey, size_t n, const SBlock& roChain = SBlock(0UL,0UL));

IV 通常以密文为前缀,并在解密前被检索和跳过。

【讨论】:

  • 我在这里假设某些东西被加密了,而不是你只剩下明文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多