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)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

Carma

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

Kelvin

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

コメントを書く

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

Facebook コメント

トラックバック 0

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