6

libsodium でcrypto_secretbox_easy () を使用して一部のデータを暗号化/復号化するのに苦労しています。使用法に関する適切なドキュメントが見つからないようです。

ユーザーからパスワードを取得し、それを使用して何らかの方法でキーを作成し、それを使用してデータを暗号化/復号化したいと考えています。

以下に投稿したおもちゃのコードの問題は、crypto_secretbox_open_easy() が verify_16.c 内から -1 を返すことです。このインターフェイスの使用方法や何が問題なのかを示すソースをどこで見つけることができるか、誰にもわかりませんか? ありがとう!

 unsigned char * cipher;
 unsigned char * decoded;
 unsigned char * message;
 unsigned long long message_len = 32;
 size_t noncelen = sizeof(char) * crypto_secretbox_noncebytes();
 size_t keylen = sizeof(char) * crypto_secretbox_keybytes();
 unsigned char * nonce = calloc(noncelen, noncelen);
 unsigned char * key = calloc(keylen, keylen);

 message = calloc(32*sizeof(char), sizeof(char) * 32);
 cipher = calloc(32*sizeof(char), sizeof(char) * 32);
 decoded = calloc(32*sizeof(char), sizeof(char) * 32);

 crypto_secretbox_easy((unsigned char *)cipher, (const unsigned char *)message, 
                      message_len, nonce, key);

 crypto_secretbox_open_easy((unsigned char *)decoded, (const unsigned char *) cipher, 
                            message_len, nonce, key);
4

2 に答える 2

1

暗号のサイズは MAC バイトのメッセージよりも 16 バイト大きくする必要があるため、さらに 16 バイトを割り当て、open_easy では message_len に + 16 を追加するだけです。

また、calloc への呼び出しは実際には必要以上に多くのメモリを割り当てます。calloc はメソッド内で乗算を行うためです。

于 2014-03-24T14:45:13.820 に答える