章节大纲

  • 在本实验中,我们添加一个额外的消息 N = "Extra message" 到填充后的原始消息上: M = "This is a test message",并计算它的哈希值。该程序如下所示。
    /* calculate_mac.c */
    #include <stdio.h>
    #include <openssl/sha.h>
    
    int main(int argc, const char *argv[])
    {
       SHA256_CTX c;
       unsigned char buffer[SHA256_DIGEST_LENGTH];
       int i;
    
       SHA256_Init(&c);
       SHA256_Update(&c,
          "This is a test message"
          "\x80"
          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
          "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
          "\x00\x00\x00"
          "\x00\x00\x00\x00\x00\x00\x00\xB0"
          "Extra message",
          64+13);
       SHA256_Final(buffer, &c);
    
       for(i = 0; i < 32; i++) {
         printf("%02x", buffer[i]);
       }
       printf("\n");
       return 0;
    }

    学生可以编译运行上面的程序:
    $ gcc calculate_mac.c -o calculate_mac -lcrypto
    $ ./calculate_mac

    任务。学生应该更改上面清单中的代码,为以下请求计算MAC(假设我们知道MAC密钥):
    http://www.seedlab-hashlen.com/?myname=<name>&uid=<uid>
    &lstcmd=1<padding>&download=secret.txt
    &mac=<hash-value>

    就像上一个任务一样, <name> 的值应该是你的真实姓名。 <uid> 和 MAC 密钥的值应从 LabHome/key.txt 文件中获取。把请求发送到服务器,查看能否成功下载 secret.txt 文件。

    应该注意的是,在 URL 中,需要通过将 \x 更改为 % 来对填充中的所有十六进制数字进行编码。例如,在上面的 URL 中,填充中的 \x80 应该替换为 %80。在服务器端,URL 中的编码数据将被改回十六进制数。