我有一段测试代码,该代码使用Blowfish(openssl / blowfish.h)进行加密,然后解密一个字符串。但是当它再次出现时,它没有被正确解密。谁能告诉我为什么?
(从OP的原件http://pastebin.com/AaWSF5pX复制)
#include <stdlib.h>
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
// blowfish key
const char *key = "h&6^5fVghasV_Fte";
BF_KEY bfKey;
BF_set_key(&bfKey, strlen(key), (const unsigned char*)key);
// encrypt
const unsigned char *inStr = (const unsigned char *)"hello world\0";
unsigned char *outStr = (unsigned char *)malloc(sizeof(unsigned char) * 100);
BF_ecb_encrypt(inStr, outStr, &bfKey, BF_ENCRYPT);
// decrypt
unsigned char buf[100];
BF_ecb_encrypt((const unsigned char*)outStr, buf, &bfKey, BF_DECRYPT);
std::cout << "decrypted: " << buf << "\n";
free(outStr);
return 0;
}
输入:“ Hello World”
输出:“ hellowo4�\Z��”
最佳答案
Blowfish在64位块上运行:即8字节的倍数。 BF_ecb_ *处理单个此类块。那是字符串的前8个字符。其余的将被BF_ecb_ *忽略。如果您想加密更长的时间,如果您真的很高兴使用ECB模式或使用类似BF_ofb_ *的内容,则将BF_ecb_ *依次应用于一个块。
关于c++ - Blowfish C++无法正确加密/解密..为什么..?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5225996/