我如何将字符串复制到CryptUnprotectData的bytearray

how do I copy string into bytearray for CryptUnprotectData

本文关键字:CryptUnprotectData bytearray 复制 字符串      更新时间:2023-10-16

我试图将数据从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;
}
相关文章:
  • 没有找到相关文章