我如何将字符串复制到CryptUnprotectData的bytearray
how do I copy string into bytearray for CryptUnprotectData
我试图将数据从sqlite3文件传递到CryptUnprotectData。
在使用sqlite3库选择数据后,我可以将其打印到控制台。这是我试图解密的数据(argv[I]):
printf("%s = %sn", azColName[i], argv[i] ? argv[i] : "NULL");
十六进制(password_value) = 01000000 d08c9ddf0115d1118c7a00c04fc297eb01000000eeb05ae6044e5749b7bb63fab045c99c00000000020000000000106600000001000020000000f6027d9b2ea5742c36075600ddfa7ecdafd55be247f984fbc92bfc9c7f9de9520000000000000000020000200000006ec519aca4da90efa7149ff16502e0985f4b86c75f52a1ef7caaac5fc88e48cc10000000f0b305a4829f3d397f1379cd63eab48f400000001bd5a3b07daa31ae35a2fce8bddbba28055307e3137b3ebe899c0a0ad35e905ae125ff0acbca2982169abab0ae899493446897297d47ba65a09115ab13821efe
这是将解密的函数的原型:
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结构体如下所示:
typedef struct _CRYPTOAPI_BLOB {
DWORD cbData;
BYTE *pbData;
};
地点:cbData ==一个DWORD变量,它包含数据的字节数。pbData ==指向数据缓冲区的指针。
我认为我需要做的是创建一个这样的结构:DATA_BLOB DataEncrypted;
DataEncrypted。pbData = ??DataEncrypted。cbData = strlen(argv[i])/2
并将argv[i]中的数据复制到字节数组中…然后设置pbData ==指向字节数组的指针。
我不知道该怎么做那部分…有什么建议吗?
这是一个很好的答案。它是在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;
}
- 没有找到相关文章