AES明文到密文加密

时间:2011-12-11 16:30:37

标签: c cryptography openssl aes

我目前正在处理Practical Cryptography并尝试在第4章末​​尾进行练习。有几个问题要求您使用密钥以十六进制解密一些密文。十六进制。我正在使用openssl加密库来尝试实现这一目标。

我很难知道我是否已经正确地完成了这项工作,因为我已经通过多种方式完成了这项工作,并得到了不同的答案。另外,因为提供的值是十六进制的,所以我很难将它们变为可用值。

我只是使用printf将十六进制值放入字符串中。这对我来说似乎是正确的,因为我可以再次阅读它们并且它们是正确的。关键是更难,我试图将数字直接存储到openssl提供的密钥结构中,但我不知道openssl实现如何使用密钥结构。

我的代码如下。如果我以这种格式运行它,我得到以下输出。

输入:0x53:0x9b:0x33:0x3b:0x39:0x70:0x6d:0x14:0x90:0x28:0xcf:0xe1:0xd9:0xd4:0xa4:0x7

Out:0xea:0xb4:0x1b:0xfe:0x47:0x4c:0xb3:0x2e:0xa8:0xe7:0x31:0xf6:0xdb:0x98:0x4e:0xe2

我的问题是:

  1. 我存储密钥的方法看起来是否正确?
  2. 我的整体方法看起来是否正确?
  3. 有谁知道实际答案应该是什么?
  4. 以下代码

    int main( void )
    {
      unsigned char InStr [100];
      unsigned char OutStr[100];
      char KeyStr[100];
      AES_KEY Key;
    
      Key.rd_key[0] = 0x8000000000000000;
      Key.rd_key[1] = 0x0000000000000000;
      Key.rd_key[2] = 0x0000000000000000;
      Key.rd_key[3] = 0x0000000000000001;
      Key.rounds = 14;
    
      sprintf( InStr, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\0",
               0x53, 0x9B, 0x33, 0x3B, 0x39, 0x70, 0x6D, 0x14,
               0x90, 0x28, 0xCF, 0xE1, 0xD9, 0xD4, 0xA4, 0x07 );
    
      AES_decrypt( InStr, OutStr, &Key );
    
      printf( "In : %#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx\n",
              InStr[0], InStr[1], InStr[2], InStr[3], InStr[4], InStr[5], InStr[6], InStr[7],
              InStr[8], InStr[9], InStr[10], InStr[11], InStr[12], InStr[13], InStr[14], InStr[15] );
    
      printf( "Out: %#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx:%#hx\n",
              OutStr[0], OutStr[1], OutStr[2], OutStr[3], OutStr[4], OutStr[5], OutStr[6], OutStr[7],
              OutStr[8], OutStr[9], OutStr[10], OutStr[11], OutStr[12], OutStr[13], OutStr[14], OutStr[15] );
    
      return 0;
    }
    

0 个答案:

没有答案