首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用麻风库,GCM模式

如何使用麻风库,GCM模式
EN

Stack Overflow用户
提问于 2019-05-24 19:27:28
回答 1查看 155关注 0票数 0

我使用的是麻风密码库。我不能正确地使用GCM模式。这就是我是怎么做的。我做错了什么?

代码语言:javascript
复制
#include<iostream>
#include<nettle/gcm.h>
#include<nettle/aes.h>
using namespace std;

int main()
{
    unsigned char key[] = "1234567890123456";
    unsigned char iv[] = "123456789012";
    unsigned char src[33] = "12345678901234567890123456789012";
    unsigned char encoded[32], digest[16], datum[8] = {0,}, decoded[32];

    struct gcm_key gk, gk2;
    struct gcm_ctx gc, gc2;
    struct aes128_ctx ac, ac2;

    aes128_set_encrypt_key(&ac, key);
    gcm_set_key(&gk, &ac, (nettle_cipher_func*)aes128_encrypt);
    gcm_set_iv(&gc, &gk, 12, iv);
    gcm_update(&gc, &gk, 8, datum);
    gcm_encrypt(&gc, &gk, &ac, (nettle_cipher_func*)aes128_encrypt, 32, encoded, src);
    gcm_digest(&gc, &gk, &ac, (nettle_cipher_func*)aes128_encrypt, 16, digest);

    aes128_set_decrypt_key(&ac2, key);
    gcm_set_key(&gk2, &ac2, (nettle_cipher_func*)aes128_decrypt);
    gcm_set_iv(&gc2, &gk2, 12, iv);
    gcm_update(&gc2, &gk2, 8, datum);
    gcm_decrypt(&gc2, &gk2, &ac2, (nettle_cipher_func*)aes128_decrypt, 32, decoded, encoded);
    gcm_digest(&gc2, &gk2, &ac2, (nettle_cipher_func*)aes128_decrypt, 16, digest);

    for(unsigned char c : src) cerr << hex << +c;
    cout << endl;
    for(uint8_t c : encoded) cerr << hex << +c;
    cout << endl;
    for(uint8_t c : decoded) cerr << hex << +c;
    cout << endl;
}

输出结果是

31323334353637383930313233343536373839303132333435363738393031320 80435d9ceda763309ec12a876556f72c14641344ef19fbc5c9ca2f51ebeef f064f9e8db7ae3466979c7b79de95ba6c50714023758ad9abd6eac24d6f565

第一行是源代码,最后一行是解码的一行。它们不匹配..因为我正在尝试创建GCM的模板包装类,所以不能使用gcm-aes函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-25 15:50:29

GCM仅使用底层密码的加密功能,类似于CTR模式。因此您需要在所有位置(分别为1和3 )将aes128_set_decrypt_key和aes128_decrypt替换为aes128_set_encrypt_key和aes128_encrypt。

在那次更改之后,您的示例对我有效。

为了获得正确的身份验证,您还需要在解密后比较摘要,最好使用memeql_sec。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56291767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档