c ++バイナリデータをbase64でデコードできません-部分的な結果のみ

ProGEEK

期待どおりに動作しないc ++コードのブロックがあり、その理由を理解できません

base64でエンコードされた2つの暗号化されたキー(両方とも512バイトの長さ)があります。

最初のキーは正常にデコードされ、復号化できます。2番目のキーは約半分しかデコードしないため無効ですが、デコーダーはデコードされた長さとして512を返します

main.cpp:

#include <openssl/bio.h>
#include <openssl/evp.h>

int base64Decode(const char *encoded_bytes, unsigned char **decoded_bytes)
{
    BIO *b64, *bioMem;
    size_t buffer_length, decoded_length;

    bioMem = BIO_new_mem_buf((void *)encoded_bytes, -1);
    b64 = BIO_new(BIO_f_base64());
    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
    bioMem = BIO_push(b64, bioMem);

    buffer_length = BIO_get_mem_data(bioMem, NULL);
    *decoded_bytes = (unsigned char*)malloc(buffer_length);
    decoded_length = BIO_read(bioMem, *decoded_bytes, buffer_length);

    // Here to see what is actually getting decoded
    printf("%s\n", *decoded_bytes);

    BIO_free_all(bioMem);

    return decoded_length;
}

int main(){
    unsigned char *binaryBuffer = (unsigned char*)malloc(512);

    // Test if "YOYO!" gets correctly decoded (Which it seems to)
    printf("Length is: %d\n\n", base64Decode("WU9ZTyEA", &binaryBuffer));

    // Key #1 - Decodes successfully - 512 returned
    printf("Length is: %d\n\n", base64Decode("va+Kr/EHdeIwdgzymP40nnyIoFqpb6Y0sWAgrpz8B1DQx+9flmJyDF7ZeaQSnIBRdB17alzf5HmNga9kmAWLJvAeBSBexTrZvPSuA0Ug4cvI+hPAtPecWjm4s1s+3NmWuWI3Wv2trkv/uQNz2WzFaXPz4wT4gcl+zEYf1wie5VO2hzF0xSgmSR+AnF1gx6C4ncAKBnnm9K/sQ8Ldf+SyE5OJM9znczVRZRB6s+3zG3UPC17Atnyvh2pBxRCPoRrV4DDP+DcaijIr+KbCgp1G56r2faT9d0nfbAKarnNAhBXOH4QODW/hhirHSj2OKqtYSNmOJXja3R9d625EZcfcH/pU6bXB+RvupLG9Kkj1WF4bD8v5+RdqsRxlJVEE0I9o2VRG+kIOqDg8FLe2lDoefCXnpLgXh15j9xTh7zHXTAq0diTskfneo5KehwoveY7/TrxOXg3VOazj3TaiLmB1YDfZwPD2MwfQ9VyP5uAd2NB8qcXDSDVJcD7QPeF8hcPFu7wX5GsNXNOFdIFnzaaKfdiT5uz2m3QnORTFTloi2IM2ItYRsm2GErD6cyJTf1qnSPJo8r5lx6A1UKDvyF8kwWoC3UnzWA6djzi3fi9QGVO6agytUDNX8IiHpxU2V6EK0CRl3tRpogMhSNyr2F78IazNECStTt5MO0AyOMpkQt0=", &binaryBuffer));

    // Key #2 - Only decodes about half, yet returns 512
    printf("Length is: %d\n\n", base64Decode("U4tR8mRzyrqpNhhFjkbEe4I6LTYXhL7PxkbddNTQ1yZ6ofZ4s1R/UOQsq6x+CNxB+yddPirwT0yPgtm6IC1qYF9GGQsOqXHkpTrmXf0GiXDVpm91EMnyxtMu74B3OMIYgxmjoeua7HoKQkW6/GRuCpgWIoZQq7uOaKIsc3k9HGgfAFk6vTGER1YJlG28lOhsiGccl0EqD0uhrBGNhFERfAzB2gaJjI1oRO87Q2NbevKHeZycpyXgazvtw9JigA+Hp3+Cy9LUIRvF6k5uv0DKxOs5cynqYslb1LfKqT0IvLjBl4gNHl+pG5/Ur70XzZTiO1+n5jWITPoslZ4slVkl4qiTaqNWHgLT6aSUhWwPlvK+7wlk+st5ykAuSIE2e3Lia+omBRH2LQfG1v7KaOJApF3k4D0li/4QWOJ3zLwBDHB6WCwMQfNS8vTRWM1yIO/o9417wJEpBlcr/B308vGheoTF9+qRKGDe0M5PNHeBbEHhgNkLsKvcS/31HK6Xd36cg85yvyLghQRr9Gyn7TUU5m6f6iSlx3u+yo1vT7BBV6OjbxPklwCIYCZWIIOJq10JXC+bSGPbTKZYXjQW90URKesUOMi9s+DS7BKVEr471AnEyazividrgivfHDNWQisIcOctpDFCfEBAa28PYjIj4KJo5bDkSluRVcVDJVrP2Ns=", &binaryBuffer));

}

64個のエンコードされた文字列は両方ともbase64-dコマンドにパイプすると有効であり、暗号化されたキー全体が吐き出されます(rubyでBase64.decode64()を使用する場合も同じです)

コンパイル済み:

g++ -o main.o -c main.cpp
g++ -o test main.o -lcrypto

乾杯

gha.st

キーをゼロで終了する文字列として印刷することで確認します。これは最初のキーで機能する可能性があります。これは、ゼロ文字が埋め込まれていないためですが、2番目のキーの位置0x81(129、130番目の文字を意味する)にゼロ文字が埋め込まれているため、出力が早期に終了します。

コードもメモリリークしていることに注意してください!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

c ++でbase64でエンコードされた大量のデータをデコードします

分類Dev

base64 c#との間で奇妙な.shmファイルデータをエンコードおよびデコードします

分類Dev

ノードでデコードされたbase64データの値を取得できません

分類Dev

xmlデータをc#のドロップダウンリストにバインドできません

分類Dev

C#で大きなbase64テキスト文字列をデコードします

分類Dev

Pythonでバイナリデータを読み取る(Cコードを置き換えるため)

分類Dev

C#のオブジェクトからプロパティを取得します-元々はレガシーシステムのbase64文字列からであり、元のバイナリにアクセスできません

分類Dev

C ++のistreamでバイナリデータを読み込むことはできますか?

分類Dev

Cのユーザーからさまざまなタイプのデータを取得するためのコードを実行できません

分類Dev

BASE64のCookieエンコーディングをサーバーに正しく送信できません

分類Dev

C#でBase64をデコードすると、1つの余分なパディング文字で誤った結果が得られることがあります

分類Dev

プロセスでObjective-Cクラスデータを読み取るためのサポートコードを実行できませんでした。実際のiPhoneデバイスで

分類Dev

C ++でバイナリデータを読み取り、MySQLに書き込む

分類Dev

C#:Base64文字列をデコードしても完全な結果が返されない/ gibberisch

分類Dev

phpでエンコードされた一部のutf-8文字列base64は、iOS base64ライブラリを使用してデコードできませんか?

分類Dev

C ++のバイトモードでバイナリファイルを読み取ることができません

分類Dev

C#背景のグラデーションをbase64でエンコードする方法

分類Dev

rabbitmqキューからのbase64 'ペイロード'文字列を正しくデコードできません

分類Dev

C ++の追加モードを使用してファイルにデータを挿入できません

分類Dev

PythonでCからヘッダー付きのバイナリデータを読み取る

分類Dev

C ++でバイナリオブジェクトをエンコード/デコードする標準的な方法

分類Dev

Javaでのbase64のエンコードとC#でのデコード

分類Dev

OpenSSLは改行を含まないbase64データをデコードできますか?

分類Dev

C#アドインのリボンから「カスタムツールバー」を削除できません

分類Dev

ファイルからvector <T>への行ごとの読み取りは、バイナリデータC ++では正しく機能しません

分類Dev

C#のリストからデータを取得できません

分類Dev

C#ExpandoObjectのデータを表示-デリゲートではないため、ラムダ式をタイプ「…」に変換できません

分類Dev

Cで3つのバイナリデータを組み合わせる方法は?

分類Dev

"for line in ..."の結果はUnicodeDecodeError: 'utf-8'コーデックはバイトをデコードできません

Related 関連記事

  1. 1

    c ++でbase64でエンコードされた大量のデータをデコードします

  2. 2

    base64 c#との間で奇妙な.shmファイルデータをエンコードおよびデコードします

  3. 3

    ノードでデコードされたbase64データの値を取得できません

  4. 4

    xmlデータをc#のドロップダウンリストにバインドできません

  5. 5

    C#で大きなbase64テキスト文字列をデコードします

  6. 6

    Pythonでバイナリデータを読み取る(Cコードを置き換えるため)

  7. 7

    C#のオブジェクトからプロパティを取得します-元々はレガシーシステムのbase64文字列からであり、元のバイナリにアクセスできません

  8. 8

    C ++のistreamでバイナリデータを読み込むことはできますか?

  9. 9

    Cのユーザーからさまざまなタイプのデータを取得するためのコードを実行できません

  10. 10

    BASE64のCookieエンコーディングをサーバーに正しく送信できません

  11. 11

    C#でBase64をデコードすると、1つの余分なパディング文字で誤った結果が得られることがあります

  12. 12

    プロセスでObjective-Cクラスデータを読み取るためのサポートコードを実行できませんでした。実際のiPhoneデバイスで

  13. 13

    C ++でバイナリデータを読み取り、MySQLに書き込む

  14. 14

    C#:Base64文字列をデコードしても完全な結果が返されない/ gibberisch

  15. 15

    phpでエンコードされた一部のutf-8文字列base64は、iOS base64ライブラリを使用してデコードできませんか?

  16. 16

    C ++のバイトモードでバイナリファイルを読み取ることができません

  17. 17

    C#背景のグラデーションをbase64でエンコードする方法

  18. 18

    rabbitmqキューからのbase64 'ペイロード'文字列を正しくデコードできません

  19. 19

    C ++の追加モードを使用してファイルにデータを挿入できません

  20. 20

    PythonでCからヘッダー付きのバイナリデータを読み取る

  21. 21

    C ++でバイナリオブジェクトをエンコード/デコードする標準的な方法

  22. 22

    Javaでのbase64のエンコードとC#でのデコード

  23. 23

    OpenSSLは改行を含まないbase64データをデコードできますか?

  24. 24

    C#アドインのリボンから「カスタムツールバー」を削除できません

  25. 25

    ファイルからvector <T>への行ごとの読み取りは、バイナリデータC ++では正しく機能しません

  26. 26

    C#のリストからデータを取得できません

  27. 27

    C#ExpandoObjectのデータを表示-デリゲートではないため、ラムダ式をタイプ「…」に変換できません

  28. 28

    Cで3つのバイナリデータを組み合わせる方法は?

  29. 29

    "for line in ..."の結果はUnicodeDecodeError: 'utf-8'コーデックはバイトをデコードできません

ホットタグ

アーカイブ