2011-11-14 6 views
0

sqlite3ファイルからCryptUnprotectDataにデータを渡そうとしています。CryptUnprotectDataのbytearrayに文字列をコピーする方法

sqlite3ライブラリを使用してデータを選択した後、それをコンソールに印刷できます。

:これは、復号化する関数のプロトタイプである

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 

進(password_value)= 01000000D08C9DDF0115D1118C7A00C04FC297EB01000000EEB05AE6044E5749B7BB63FAB045C99C00000000020000000000106600000001000020000000F6027D9B2EA5742C36075600DDFA7ECDAFD55BE247F984FBC92BFC9C7F9DE9520000000000000000020000200000006EC519ACA4DA90EFA7149FF16502E0985F4B86C75F52A1EF7CAAAC5FC88E48CC10000000F0B305A4829F3D397F1379CD63EAB48F400000001BD5A3B07DAA31AE35A2FCE8BDDBBA28055307E3137B3EBE899C0A0AD35E905AE125FF0ACBCA2982169ABAB0AE899493446897297D47BA65A09115AB13821EFE

:これは私が解読しようとしているデータ(ARGV [I])であります CBDATAは、データのバイト単位のカウントを含むDWORD変数を==:

typedef struct _CRYPTOAPI_BLOB { 
    DWORD cbData; 
    BYTE *pbData; 
}; 

BOOL WINAPI CryptUnprotectData(
    __in  DATA_BLOB *pDataIn, 
    __out_opt LPWSTR *ppszDataDescr, 
    __in_opt DATA_BLOB *pOptionalEntropy, 
    __in  PVOID pvReserved, 
    __in_opt CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct, 
    __in  DWORD dwFlags, 
    __out  DATA_BLOB *pDataOut 
); 

DATA_BLOB構造体は次のようになります。 pbData ==データバッファへのポインタです。

私は だと思います。私がする必要があるのは、次のような構造を作成することです。DATA_BLOB DataEncrypted;

DataEncrypted.pbData = ??? DataEncrypted.cbData = strlen(argv [i])/ 2

のデータをargv [i]からバイト配列にコピーし、pbData ==ポインタをバイト配列に設定します。

私はその部分を行う方法がわかりません...ご意見はありますか?

答えて

-1

Here's a good answer。それはJavaのですが、アルゴリズムは同じです:

public static byte[] hexStringToByteArray(String s) { 
    int len = s.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) { 
     data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) 
          + Character.digit(s.charAt(i+1), 16)); 
    } 
    return data; 
}