So-net無料ブログ作成

CryptBinaryToString/CryptStringToBinary [CodeTips]

このブログは放置しておくと「荒れ野」になってしまうので(^^;、それを回避するために備忘録的なコードを載せておくことにします。

今回はCryptAPIのCryptBinaryToString/CryptStringToBinary関数です。

// 'cl -DUNICODE <sourcefilename>'
#ifndef UNICODE
#define UNICODE
#endif

#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>

#pragma comment(lib, "crypt32.lib") 
    
void wmain()
{
    WCHAR wszString[4096];
    DWORD cchString;

    /* test sample data (this data is nonsensical) */
    UCHAR data[] = "\xA1\x23\x1C\x56\x4f\x48\x06\x71\x01\x39\xCC\x55\xAA\x01\x02\x03\xac\xde\xff\xa9";

    /* encode */
    BYTE *pbBinary = data; 
    DWORD cbBinary = sizeof(data) - 1; // exclude termination null
    cchString = ARRAYSIZE(wszString);
    CryptBinaryToString(pbBinary,cbBinary,CRYPT_STRING_BASE64|CRYPT_STRING_NOCRLF,wszString,&cchString);

    printf("\nbase64:\n%S\n",wszString);
    
    /* decode */
    BYTE bufDecode[4096];
    DWORD cbDecode = ARRAYSIZE(bufDecode);
    CryptStringToBinary(wszString,cchString,CRYPT_STRING_BASE64,bufDecode,&cbDecode,NULL,NULL);

    /* print */
    cchString = ARRAYSIZE(wszString);
    CryptBinaryToString(bufDecode,cbDecode,CRYPT_STRING_HEXASCIIADDR,wszString,&cchString);
    
    printf("\nhex dump:\n%S\n",wszString);
}

使用法を示す事が目的の為、エラー処理は一切省いてあります。バッファも単純に扱っています。実際には出力データの長さを問い合わせるなどの処理が必要となるでしょう。
コンパイルし、実行すると以下の結果になります。今回はtest.cppというソースに落とし、test.exeという実行ファイルを作成しました。

C:\Test\code>cl -DUNICODE test.cpp


C:\Test\code>test

base64:
oSMcVk9IBnEBOcxVqgECA6ze/6k=

hex dump:
0000    a1 23 1c 56 4f 48 06 71  01 39 cc 55 aa 01 02 03   .#.VOH.q.9.U....
0010    ac de ff a9                                        ....


nice!(0)  コメント(12)  トラックバック(0) 

nice! 0

コメント 12

Carma

こんにちは、あなたはあなたが使用しているブログプラットフォームを教えていただけますか?
私はすぐに自分のブログを開始するつもりですが、私はBlogEngine / Wordpress / B2evolutionとDrupalの間で厳しい選択をしています。
私が尋ねる理由はあなたのレイアウトが違っているからです
ほとんどのブログと私は完全にユニークなものを探しています。
P.S申し訳ありませんがオフトピックですが、私は尋ねなければならなかった!
by Carma (2017-10-11 13:30) 

Kelvin

ちょっと、そこ!これはオフトピックのようなものですが、私はいくつか必要です
確立されたブログからの助け。セットアップが難しいですか
あなた自身のブログ?私はあまりtechincalではないが、私は物事を把握することができます
かなり速い。私は自分自身を作成することを考えているが、私は
どこから始めるべきかわからない。何か意見や提案がありますか?
ありがとうございました
by Kelvin (2017-10-22 01:11) 

Latia

かなり!これは非常に素晴らしい投稿でした。
この情報を提供していただきありがとうございます。
by Latia (2017-10-30 09:45) 

Dominique

ご挨拶!この投稿内の非常に有用なアドバイス!

それは大きな変化をもたらす小さな変化です。

共有ありがとう!
by Dominique (2017-10-30 09:47) 

Damion

良い一日!私はこれが一種の話題であることを知っていますが、あなたが知っていれば
私のコメントフォームにはcaptchaプラグインがありますか?
私はあなたと同じブログプラットフォームを使用していますが、私は見つけにくいですか?
どうもありがとう!
by Damion (2017-10-30 09:54) 

Edna

私は本当にこれを読もうと熱望しているから
毎日更新されるブログの投稿。素晴らしいデータで構成されています。
by Edna (2017-10-30 10:07) 

Eldon

あなたがいない場合、質問をすることは本当に素晴らしいことです
何かを完全に理解しているが、この投稿は
敬虔な理解。
by Eldon (2017-10-30 10:41) 

Joseph

こんにちは、教育についての素晴らしい記事です
定義された、常にそれを維持する。
by Joseph (2017-10-30 11:34) 

Rickie

最新の情報については、ワールドワイドウェブにアクセスする必要があります
ウェブ上で私はこのウェブサイトを最高のウェブサイトとして見つけました
最も熱い更新。
by Rickie (2017-10-30 11:36) 

Lilly

素晴らしい問題がここにあります。私はあなたの記事を見て非常にうれしいです。
おかげさまで、私はあなたに手を差し伸べる前に見ています。
親切に私に電子メールを落としますか?
by Lilly (2017-10-30 12:13) 

Sandra

このウェブページにアクセスして、すべての同僚の意見を読むことは注目に値する
私はノウハウを得ることに熱心です。
by Sandra (2017-10-31 01:21) 

Patricia

あなたからの素晴らしい商品。私はあなたのことを理解している
前のものとあなたはちょうど大きすぎます。
私は実際にあなたがここで買収したものが好きです。
本当にあなたが言っていることとあなたがそれを言う方法が好きです。

あなたはそれを楽しくさせ、あなたはまだ世話をする
それを賢明に保つこと。もっと読むのを待つことができない
あなたから。これは本当にすばらしいウェブサイトです。
by Patricia (2018-01-17 13:19) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。