【问题标题】:Is there any way to represent 4 byte number as a 16 byte number?有没有办法将 4 字节数表示为 16 字节数?
【发布时间】:2014-01-24 00:34:58
【问题描述】:

使用 4 字节 IV 加密一些数据。但是,我使用的加密算法(AES128)需要一个 16 字节(128 位)的密钥。说,我的代码如下:

#include<gcrypt.h>
void encrypt(){
    int IV = 6174;
    gcry_cipher_hd_t hd;        
    errStatus = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0);
    errStatus = gcry_cipher_setkey(hd, keyBuffer, 16);
    gcry_cipher_setiv(hd, &IV, 16);
    gcry_cipher_encrypt(hd, output, 16, bytesToEncrypt, 16);
}

假设keyBuffer 包含一个 16 字节的密钥,bytes,output` 分别是我的输入和输出。我该如何正确地进行静脉注射?

【问题讨论】:

  • 这似乎是错误的做法。一个小的 IV 将危及加密安全。而且,如果您在示例中使用恒定的 IV,它将受到很大的影响。 IV 应该是随机的,并且对于每条加密的消息都是不同的。
  • 我知道。这只是一个熟悉加密库的课堂练习。

标签: c libgcrypt


【解决方案1】:

你能试试这个代码来避免缓冲区溢出吗?不过我自己没有测试过这个

int IV[4] = { 6174 }; // { 6174, 0, 0, 0 }

【讨论】:

  • “分段错误(核心转储)”:-(
  • gcc -O0 -g (oh-zero gee) 将生成一个适合调试的二进制文件。您可以在gdb 下运行调试二进制文件以查看SEGV 发生的确切位置吗?你可以输入bt 来显示堆栈帧。 cs.baylor.edu/~donahoo/tools/gdb/tutorial.html
猜你喜欢
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2023-03-13
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多