You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenSSL EVP API下AES_128_CBC生成密文与已知密文比对问题咨询

AES_128_CBC生成密文与已知密文比对问题(SEED实验相关)

免责声明:我正在完成SEED实验的作业,不需要实现层面的帮助,希望得到AES_128_CBC生成密文与已有已知密文比对方法的相关协助。

问题背景

  • 已知AES密钥通过srand()生成,且掌握文件生成的时间窗口,已经计算出起始种子,可生成起始种子到时间窗口结束范围内的所有密钥
  • 计划使用OpenSSL API,结合生成的密钥和给定的IV,对明文执行aes_128_cbc加密,再和已知密文比对
  • 参考OpenSSL官方对称加密示例实现算法,将已知明文、密文、IV都初始化为unsigned char数组,但生成的密文始终无法和已知密文匹配,怀疑是输入格式存在问题

相关代码

void main(){
    OpenSSL_add_all_algorithms();
    ERR_load_crypto_strings();

    unsigned int i;
    unsigned char key[7201][KEYSIZE];

    unsigned char iv[] = "09080706050403020100A2B2C2D2E2F2";
    unsigned char plaintext[] = "255044462D312E350A25D0D4C5D80A34";
    unsigned char ciphertext[] = "D06BF9D0DAB8E8EF880660D2AF65AA82";

    unsigned int startSeed = 1524020929;

    unsigned char cipher[7201][128];
    int cipher_len;

    // 2 hours is 7200 seconds
    //printf("Beginning keygen\n");
    for(i = 0; i <= (7200); i++){
    
        srand(i + startSeed);
        //printf("Here\n");
        for(int j = 0; j < KEYSIZE; j++){
        
            //printf("Assigning key value\n");
            key[i][j] = rand() % 256;
            //printf("%.2x", (unsigned char)key[j]);
        }
        //printf("\n");
        cipher_len = encrypt(plaintext, strlen((char *)plaintext), key[i], iv, cipher[i]);
        //printf("%d\n", sizeof(cipher));
        //BIO_dump_fp(stdout, (const char *)cipher, cipher_len);
    
        if(memcmp(cipher[i], ciphertext, 128) == 0){
            printf("found matching ciphertext");
        
        }
    }
}

疑问

我是否需要将每个cipher[i]转换为十六进制字符串后再进行比对?

后续编辑

编辑1

我写了一个bash脚本尝试实现相同逻辑,尝试比对密文的base64编码,但也没有成功。我对bash脚本编写经验不足,同时也没有完全掌握加密需要传入的数据类型要求:
Bash script

编辑2

以下是我生成起始种子的流程:实验手册说明Alice在“2018-04-17 23:08:49”创建了一个pdf文件,我使用date命令date -d "2018-04-17 23:08:49" +%s得到了该时间点距离epoch的秒数,将其作为起始种子。实验同时说明Alice生成密钥的时间在该起始时间到之后2小时的范围内,因此我将种子范围的终点设为startSeed + 7200。

最终解决方案

经过修改我最终成功解决了问题:

  • 调整为在正确的时间窗口内生成种子
  • 设置AES算法不添加padding
  • 将密文数组的分配空间改为仅16字节,修改memcmp仅比对16字节
    完成这些修改后成功复现了已知密文。

内容的提问来源于stack exchange,提问作者omri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:24:06