小编Eug*_*ene的帖子

通过c ++ WinAPI计算MD5哈希值

我的C++应用程序需要计算MD5哈希值.目前,它由OpenSSL完成,我想使用WinAPI - 以避免依赖外部库.

我写了这段代码:

HCRYPTPROV hCryptProv = NULL;
HCRYPTHASH hHash = NULL;
HCRYPTHASH hHexHash = NULL;
HASH HA1;
HASHHEX HA1HEX;
DWORD data = HASHLEN;

// Get a handle to a cryptography provider context.
if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0))
{
    goto err;
}

// Acquire a hash object handle.
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash))
{
    goto err;
}

CryptHashData(hHash, (const BYTE *)str, strlen(str), 0);
Run Code Online (Sandbox Code Playgroud)

现在,奇怪的是有时它运行良好,但在其他时候CryptAcquireContext返回NTE_BAD_KEYSET错误,根据MSDN:

密钥容器无法打开.此错误的常见原因是密钥容器不存在.要创建密钥容器,请使用CRYPT_NEWKEYSET标志调用CryptAcquireContext.此错误代码还可以指示拒绝访问现有密钥容器.密钥集创建者可以使用CryptSetProvParam授予对容器的访问权限.

大段引用

现在我的问题是:

  1. 如果我调用CryptSetProvParam,它到底是做什么的?简单的应用程序更改操作系统设置是否正常?
  2. 在C++窗口中计算MD5有什么不那么困难的方法吗?

如果有人给我很好的建议,我会很感激.
谢谢.

c++ windows hash winapi md5

6
推荐指数
2
解决办法
2万
查看次数

使用多个GIT存储库构建TFS

看起来TFS每次构建仅支持一个存储库。一旦我需要使用一些单独存储的第三方库,这对我来说还不够。

我可以为此使用GIT子模块,但是在这种情况下,构建将不会与提交和工作项相关联,因为它会忽略来自子模块的提交。此外,子模块中的更改不会触发构建。

是否可以使用插件,扩展名或类似的东西定义具有多个存储库的构建?

git tfs build tfsbuild azure-devops-server

5
推荐指数
1
解决办法
4858
查看次数

将boost :: signal作为boost :: function传递

我有一个带有信号成员的类,用boost :: function封装.

是否可以使用此API添加另一个信号作为处理程序?

class Foo
{
public:
  VOID AddHandler(boost::function<VOID()> handler)
  {
     m_signal.connect(handler);
  }

private:
  boost::signal<VOID()> m_signal;
};

boost::signal<VOID()> signal;

VOID SignalCaller()
{
    signal();
}

int main( )
{ 
   Foo foo;
   //foo.AddHandler(signal); // I want to
   foo.AddHandler(&SignalCaller); // I have to
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-signals

3
推荐指数
1
解决办法
1283
查看次数

为什么Bitblt无法工作

>   case WM_PAINT:          
                      {
>               hdc = BeginPaint(hWnd, &ps);
>               // TODO: Add any drawing code here...
>               RECT rt;
>               GetClientRect(hWnd, &rt);
>               HDC myHdc = CreateCompatibleDC(hdc);
>               
>               DrawText(myHdc, szHello, strlen(szHello), &rt, DT_CENTER);
>               BitBlt(hdc,0,0,rt.right-rt.left,rt.bottom-rt.top,myHdc,0,0,SRCCOPY);
>               
>               EndPaint(hWnd, &ps);            
                        }
> 
>           break;
Run Code Online (Sandbox Code Playgroud)

为什么文字无法在窗口显示?

windows gdi bitblt

1
推荐指数
1
解决办法
1584
查看次数

标签 统计

c++ ×2

windows ×2

azure-devops-server ×1

bitblt ×1

boost ×1

boost-signals ×1

build ×1

gdi ×1

git ×1

hash ×1

md5 ×1

tfs ×1

tfsbuild ×1

winapi ×1