cuốn sách gpt4 ai đã làm

Mã hóa và giải mã tin nhắn bằng Blowfish

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 03:51:48 29 4
mua khóa gpt4 Nike

Đây là mã cơ bản để mã hóa và giải mã tin nhắn:

#include 
#include
#include

//gcc cryptage.c -o mật mã -lcrypto

int chính(){

BF_KEY *key = malloc(sizeof(BF_KEY));

unsigned char *crypt_key = "Khóa mã hóa";
const unsigned char *in = "Thư cần mã hóa";
int len ​​​​= strlen(crypt_key);
unsigned char *out = malloc(sizeof(char)*len);
unsigned char *result = malloc(sizeof(char)*len);


//Xác định khóa mã hóa
BF_set_key(khóa, len, crypt_key);

//Mã hóa
BF_ecb_encrypt(vào, ra, khóa, BF_ENCRYPT);

//Giải mã
BF_ecb_encrypt(ra, kết quả, khóa, BF_DECRYPT);

fprintf(stdout,"Kết quả: %s\n",kết quả);

return 0;

}

Vấn đề của tôi là kết quả tôi nhận được. Nó luôn là một chuỗi 8 ký tự và không có gì hơn. Bạn có thể giúp tôi mã hóa và giải mã toàn bộ tin nhắn được không?

Cảm ơn!

câu trả lời hay nhất

Như @WhozCraig đã nói, xử lý 8 byte mỗi lần.

Dữ liệu được mã hóa phải được xử lý dưới dạng mảng byte thay vì chuỗi C.
Vì vậy hãy cân nhắc việc sử dụng \0 chuỗi được mã hóa và sử dụng ngẫu nhiên Dữ liệu được đệm để tạo thành một mảng byte là bội số của 8.
Mã hóa được gọi nhiều lần, mã hóa 8 byte mỗi lần lặp.

Để giải mã, hãy gọi decrypt cho cùng số lần lặp. Lưu ý rằng kích thước bộ đệm kết quả có thể cần phải là bội số của 8.

const unsigned char *in = "Thư cần mã hóa";
size_t InSize = strlen(in) + 1;
int KeyLen = strlen(crypt_key);
size_t OutSize = (InSize + 7) & (~7);
unsigned char *out = malloc(Outsize);
ký tự không dấu *outnext = out;
//Xác định khóa mã hóa
BF_set_key(khóa, KeyLen, crypt_key);

//Mã hóa
trong khi (InSize >= 8) {
BF_ecb_encrypt(in, outnext, key, BF_ENCRYPT);
trong += 8;
tiếp theo += 8;
Kích thước -= 8;
}
if (Insize > 0) { // Xử lý độ dài không phải bát phân
ký tự không dấu buf8[8];
memcpy(buf8, in, InSize);
for (i=InSize; i<8; i++) {
buf8[i] = rand();
}
BF_ecb_encrypt(buf8, outnext, key, BF_ENCRYPT);
}

//Giải mã
ký tự không dấu *result = malloc(OutSize);
ký tự không dấu *resultNext = result;
trong khi (OutSize) {
BF_ecb_encrypt(out, resultNext, key, BF_DECRYPT);
ra += 8;
resultNext += 8;
Kích thước ngoài -= 8;
}

fprintf(stdout,"Kết quả: %s\n",kết quả);
// Không cần in các byte ngẫu nhiên được tạo ra.
return 0;
}

Mã hóa một byte đã biết trong khối cuối cùng (\0) không được thoải mái lắm. Các chỉ dẫn về độ dài khác nhau có thể cần thận trọng.

Về c - mã hóa và giải mã tin nhắn bằng Blowfish, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/20133502/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress