ErlangでAES 256ビットCBCを暗号化してから、それをCコードで解読する際に問題があります。 ErlangとCでは暗号化/復号化が機能しますが、暗号化/復号化では機能しません。ErlangでのAES-256/CBC暗号化とCでの復号化が動作しない
Ivec = "1200000000000000",
Key = "586E36EEE726B37F70A6F7B770764E99",
Data = "encrypt[38ce517c95b011bbfc999f36d09e4feb92d22dd8,38ce517c95b011bbfc999f36d09e4feb92d22222]",
PaddedText = string:left(Data ++ ",",128,$0),
%%Data is "encrypt[38ce517c95b011bbfc999f36d09e4feb92d22dd8,38ce517c95b011bbfc999f36d09e4feb92d22222],0000000000000000000000000000000000000"
EncryptedText = crypto:block_encrypt(aes_cbc256, Key, Ivec, PaddedText),
%%Send to C code
とCコード
unsigned char *key = (unsigned char *)"586E36EEE726B37F70A6F7B770764E99";
unsigned char *iv = (unsigned char *)"1200000000000000";
EVP_CIPHER_CTX *ctx;
EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)
EVP_DecryptUpdate(ctx, plaintext, &len, buf, buf_len)
私が手にエラーが
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:539:
私はErlangで復号化すると、それが正常に動作し、私はCで暗号化したときに、それはまた同じで正常に動作していますキーとIV。 暗号モードが一致しません。それは私には正しいように見えますが。 すべてのポインタが本当に便利です。 ありがとう
私は、同じデータを暗号化し、Cで復号化してからHexダンプを作成しました。実際の暗号化データErlangはsenginhは128バイトで、C opensslライブラリで暗号化された同じデータは144バイトです。通常の暗号テキストは通常長いです。ここに出力があります。 Erlangのバイナリ
はEnryption後に返さ:<<165,171,208,104,24,97,173,130,177,99,50,22,51,180,112,123,36,18,208,170,250,131,195,162,182,162,253,14,121,242,61,60,202,172,74,121,223,50,128,255,134,51,253,91,195,174,90,93,77,65,1,115,119,64,25,131,47,245,68,156,163,145,111,125,143,208,255,53,131,220,174,243,64,120,229,21,86,107,139,148,164,39,144,106,232,64,252,234,26,208,138,187,213,244,210,11,174,47,126,4,97,179,194,85,8,207,116,140,236,3,145,209,95,106,36,121,241,228,153,120,226,125,227,138,130,183,217,39>>
これはErlangの
Encrypted = 128
a5 ab d0 68 18 61 ad 82 b1 63 32 16 33 b4 70 7b
24 12 d0 aa fa 83 c3 a2 b6 a2 fd 0e 79 f2 3d 3c
ca ac 4a 79 df 32 80 ff 86 33 fd 5b c3 ae 5a 5d
4d 41 01 73 77 40 19 83 2f f5 44 9c a3 91 6f 7d
8f d0 ff 35 83 dc ae f3 40 78 e5 15 56 6b 8b 94
a4 27 90 6a e8 40 fc ea 1a d0 8a bb d5 f4 d2 0b
ae 2f 7e 04 61 b3 c2 55 08 cf 74 8c ec 03 91 d1
5f 6a 24 79 f1 e4 99 78 e2 7d e3 8a 82 b7 d9 27
これは、同じデータFOFのOpenSSL(C)ライブラリーの出力であることにより、送信されます。
Encrypted = 144
a5 ab d0 68 18 61 ad 82 b1 63 32 16 33 b4 70 7b
24 12 d0 aa fa 83 c3 a2 b6 a2 fd 0e 79 f2 3d 3c
ca ac 4a 79 df 32 80 ff 86 33 fd 5b c3 ae 5a 5d
4d 41 01 73 77 40 19 83 2f f5 44 9c a3 91 6f 7d
8f d0 ff 35 83 dc ae f3 40 78 e5 15 56 6b 8b 94
a4 27 90 6a e8 40 fc ea 1a d0 8a bb d5 f4 d2 0b
ae 2f 7e 04 61 b3 c2 55 08 cf 74 8c ec 03 91 d1
5f 6a 24 79 f1 e4 99 78 e2 7d e3 8a 82 b7 d9 27
f7 01 c0 ed 95 e3 14 e5 d2 62 21 da a9 1d 2a e7
最後の16バイトがErlangにありません。 Erlang Cryptoライブラリから呼び出す必要がある他のAPIはありますか?
「データ」は16進数のように見えますが、コンマが入りますが、コンマについてのヒントはありますか? 16進数で暗号化された出力が役立ちます。 – zaph
バイナリデータをCに送信する直前に送信し、Cで受信した時点でバイナリデータを送信できますか? –
カンマは2つの異なるキーを分けるだけです(内部使用) – user3404572