网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月16日漏签0天
c吧 关注:133,365贴子:393,950
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 6回复贴,共1页
<<返回c吧
>0< 加载中...

【萌新请教】

  • 只看楼主
  • 收藏

  • 回复
  • 酷酷杰伦
  • 幼儿园
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前提条件:
1.我是写java的。c一窍不通
2.我使用dev-c++ 5.11这个ide希望测试个c的程序
3.程序中使用到了openssl,我本地已经安装了openssl
4.程序代码如下
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <openssl/pem.h>
// 对appSecrt进行哈希得到key
void hashAppSecret(const char *appSecrt, unsigned char *keyBs) {
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, appSecrt, strlen(appSecrt));
SHA256_Final(keyBs, &sha256);
}
// 解码Base64字符串
int base64Decode(const char *encoded, unsigned char **decoded) {
BIO *bio, *b64;
int decodedSize = 0;
int len = strlen(encoded);
b64 = BIO_new(BIO_f_base64());
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
bio = BIO_new_mem_buf(encoded, len);
bio = BIO_push(b64, bio);
*decoded = (unsigned char *)malloc(len);
decodedSize = BIO_read(bio, *decoded, len);
BIO_free_all(bio);
return decodedSize;
}
// 解密数据
char *decrypt(const unsigned char *keyBs, const unsigned char *encryptedData, int encryptedDataSize) {
AES_KEY aesKey;
unsigned char iv[16];
memcpy(iv, encryptedData, 16);
if (AES_set_decrypt_key(keyBs, 256, &aesKey) < 0) {
fprintf(stderr, "AES key setup failed\n");
return NULL;
}
int paddedDataSize = encryptedDataSize - 16;
unsigned char *paddedData = (unsigned char *)malloc(paddedDataSize);
if (paddedData == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return NULL;
}
memcpy(paddedData, encryptedData + 16, paddedDataSize);
unsigned char *decryptedData = (unsigned char *)malloc(paddedDataSize);
if (decryptedData == NULL) {
fprintf(stderr, "Memory allocation failed\n");
free(paddedData);
return NULL;
}
AES_cbc_encrypt(paddedData, decryptedData, paddedDataSize, &aesKey, iv, AES_DECRYPT);
free(paddedData);
// 去除尾部的填充
int padding = decryptedData[paddedDataSize - 1];
if (padding > 0 && padding <= 16) {
paddedDataSize -= padding;
}
char *result = (char *)malloc(paddedDataSize + 1);
if (result == NULL) {
fprintf(stderr, "Memory allocation failed\n");
free(decryptedData);
return NULL;
}
memcpy(result, decryptedData, paddedDataSize);
result[paddedDataSize] = '\0';
free(decryptedData);
return result;
}
int main() {
printf("11111111111111111111111111111111111111111\n");
const char *appSecret = "12345678901234567890123456789012";
const char *encryptedData = "aKXYP+C3562MZOZ4sHcji3zH3XQJvzZQHA2h1/+XmuYVTTf3PXa7Hrwn11/8ujLptt1CRmDbn8AJ/qZ3OLD427cxywuWtIXojBQwtcxwP5Nin5a8BDbVDtTMh4eFVqD9XxgGlAwkuIqhIHda+OpeDdABA34g++DKck5Z7erHcinnTsxIGaXnMrx5ngAZnmctOC4FINEOS58vQc6HFWI8iJN85eS9vpvu3sxHXh2066yugdDfYn7Wi55b9ZWXisHHotMXk9RuRhBU5cjdReBMyg8AHR/F0zIByjhaIfZWJw4+GdJr/TmHac5Lx1aSJsLYRbrnb4+Hi5go6Uv9bU2sSTTIJEW+9HgDFvnaLELGxstBOFz6sTFopfEk/IyFp6PTpl2XTpYFC5od88RpwPmPAERmbYZzDE+VPLsJ67nh+L6eubzML7knxa+1EZGk8Vo7Id/nGjOn6JvVnTSCQY+D3gI50phVKKBB5wTapBWbeG9R/aWJyvC8m/M4Sv0xVfPCSnoUENBE0+KIjI5/OlieGmBoTfPJ2kgv9MYoqJu8EXFSfplMkxyp+SC1RQ1EC/+Y6nJZTzoUqjo2o1+3vGNeYb8bjgiePACtTTl7fCXWxAzEovZon6LIGy2ddVWojBxD";
unsigned char keyBs[32];
hashAppSecret(appSecret, keyBs);
printf("454444444444444444444444444444444444\n");
unsigned char *decodedData = NULL;
int decodedSize = base64Decode(encryptedData, &decodedData);
printf("decodedSize\n");
if (decodedData == NULL || decodedSize <= 0) {
fprintf(stderr, "Base64 decoding failed\n");
return 1;
}
printf("base64 Text: %s\n", decodedData);
char *decryptedText = decrypt(keyBs, decodedData, decodedSize);
free(decodedData);
printf("22222222222222222222222222222222222222222222222222222\n");
if (decryptedText != NULL) {
printf("Decrypted Text: %s\n", decryptedText);
free(decryptedText);
} else {
fprintf(stderr, "Decryption failed\n");
return 1;
}
printf("333333333333333333333333333333333333333333333333333333\n");
return 0;
}
5.我遇到的问题:发给别人别人可以正常执行,最终输出解密后的内容,我执行后发现程序只能打印1111111这里。然后就结束了,如下图:


  • 酷酷杰伦
  • 幼儿园
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请教一下c吧的大佬。


2025-06-16 13:53:57
广告
  • Waaaaf
  • 三年级
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可能是keyBs不够大导致了越界访问。


  • 一天天武
  • 学前班
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是,你这个不是搞人心态?debug就可以了啊。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回c吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示