【发布时间】:2016-07-19 06:48:15
【问题描述】:
下面是加密和解密消息的基本代码:
#include <stdio.h>
#include <openssl/blowfish.h>
#include <string.h>
//gcc cryptage.c -o cryptage -lcrypto
int main(){
BF_KEY *key = malloc(sizeof(BF_KEY));
unsigned char *crypt_key = "Key of encryption";
const unsigned char *in = "Message to encrypt";
int len = strlen(crypt_key);
unsigned char *out = malloc(sizeof(char)*len);
unsigned char *result = malloc(sizeof(char)*len);
//Defining encryption key
BF_set_key(key, len, crypt_key);
//Encryption
BF_ecb_encrypt(in, out, key, BF_ENCRYPT);
//Décryption
BF_ecb_encrypt(out, result, key, BF_DECRYPT);
fprintf(stdout,"Result: %s\n",result);
return 0;
}
我的问题是我得到的结果。它始终是 8 个字符的字符串,仅此而已。 你能帮我加密和解密完整的消息吗?
谢谢!
【问题讨论】:
-
我现在已经开始输入两次答案并得出结论,要剖析的东西太多了,所以我只想说出来。 Blowfish 是一种对称分组密码。它对块大小的块进行操作。您正在加密一个块(默认 BF 块大小为 8 个字节;64 位),然后将这些字节解密到另一个缓冲区。因此,您只能获得前 8 个字节。
-
根据
BF_encryptman page:"BF_encrypt() 和 BF_decrypt() 是 Blowfish 加密的最低级别函数。它们加密/解密数据指向的向量的前 64 位,使用密钥密钥。除非您实现 Blowfish 的“模式”,否则不应使用这些函数。替代方法是使用 BF_ecb_encrypt()。如果您仍想使用这些函数,您应该知道它们占用每个 32 位块按主机字节顺序,在小端平台上是小端,在大端平台上是大端”.
标签: c encryption openssl blowfish