标签: cryptoapi

Microsoft是否提供连接到其自己的MS CryptoAPI的PKCS#11提供程序?

我正在寻找使用PKCS#11接口运行一些测试,并想知道微软是否提供了基于软件的实现提供PKCS#11功能?

而不是等待HSM到达并正确配置我宁愿现在开始测试与界面的交互.

cryptoapi pkcs#11 mscapi

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

OpenSSL和MS CryptoAPI:不同的数字签名

我使用makecert实用程序生成了带私钥的X509证书

makecert -n "CN=RootCATest" -r -sv RootCATest.pvk RootCATest.cer 
makecert -sk MyKeyName -iv RootCATest.pvk -n "CN=tempCert" -ic RootCATest.cer -sr currentuser -ss my -sky signature —pe 
Run Code Online (Sandbox Code Playgroud)

然后我用OpenSSL将RootCATest.pvk转换为RootCATest.pem.我提取了公钥:pubRootCATest.pem

我有一个名为'msg'的小文件.我使用SHA1签署此文件.

openssl dgst -sha1 -sign c:\RootCATest.pem -out c:\openssl c:\msg
Run Code Online (Sandbox Code Playgroud)

然后我想使用MS CryptoAPI获得相同的数字签名.

这是我的代码(注意:这是理解概念的代码所以我没有释放分配的内存)

void SwapBytes(BYTE *pv, int n)
{
    BYTE *p = pv;
    int lo, hi;
    for(lo=0, hi=n-1; hi>lo; lo++, hi--)
    {
        BYTE tmp=p[lo];
        p[lo] = p[hi];
        p[hi] = tmp;
    }
}

void sign()
{
    FILE *file;
    BYTE *msg;
    int msg_size;

    HCRYPTPROV hProv;
    HCERTSTORE hStore;
    PCCERT_CONTEXT …
Run Code Online (Sandbox Code Playgroud)

openssl cryptography rsa cryptoapi mscapi

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

使用CryptoAPI使用不可导出的私钥解密

我在windows密钥库中创建了RSA密钥对.

我成功加密了数据(对称密钥):

HCERTSTORE hstore = ::CertOpenSystemStore(NULL, L"TestStore");
PCCERT_CONTEXT pctxt = ::CertFindCertificateInStore(hstore, X509_ASN_ENCODING, NULL, 

CERT_FIND_SUBJECT_STR, L"My Test Keys", NULL);

HCRYPTPROV hprovider = NULL;
if(!::CryptAcquireContext(&hprovider,
            NULL,
            MS_ENHANCED_PROV,
            PROV_RSA_FULL,
                    NULL/*CRYPT_NEWKEYSET*/))
{
   DWORD err = ::GetLastError();
   return 0;
}

HCRYPTKEY hkey = NULL;
if(!::CryptImportPublicKeyInfo(hprovider, 
                X509_ASN_ENCODING,
                &pctxt->pCertInfo->SubjectPublicKeyInfo,
                &hkey
                ))
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我使用CryptEncrypt()和HCRYPTKEY.


接下来我想用私钥解密数据,但它不可导出.我见过的所有例子都包括导入密钥.

如何在不导出密钥的情况下解密数据?

c++ encryption keystore cryptoapi

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

SSL/TLS协议版本回退机制

我正在使用Microsoft Crypto API来处理SSL连接.当与支持TLS 1.0或更高版本的服务器通信时,一切正常,但是当我尝试处理仅支持SSL 3.0的服务器时,InitializeSecurityContext()错误代码为0x80090331(SEC_E_ALGORITHM_MISMATCH).

我试着玩SCHANNEL_CRED传递给结构AcquireCredentialsHandle()pAuthData参数.特别是它具有grbitEnabledProtocols应该控制一组支持的协议的字段.当我设置时grbitEnabledProtocols=SP_PROT_SSL3,一切正常,但它破坏了安全性,因为我也想支持TLS 1.0,1.1和1.2,并且由于安全原因,无法与禁用SSL 3.0的服务器通信.

所以问题是:

当我设置grbitEnabledProtocols=SP_PROT_SSL3TLS1_X并尝试与仅支持SSL 3.0的服务器通信时,连接以TLS 1.2开始,然后服务器使用SSL 3.0标头和适当的数据进行响应.从这里开始,根据RFC,Crypto API应该使用SSL 3.0协议继续握手过程,但是它会因为错误而失败0x80090331(SEC_E_ALGORITHM_MISMATCH客户端和服务器无法通信,因为它们没有通用的算法).

有没有办法在MS Crypto API中启用TLS 1.0,1.1,1.2和SSL 3.0?

c++ ssl cryptography cryptoapi visual-c++

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

如何导出使用 CryptoAPI 派生的 AES 密钥

我想使用 Windows CryptoAPI 函数进行 AES 加密。

众所周知,API有很多功能可以创建、散列和更改输入的密钥;它派生出密钥,您就可以处理它。

我的问题是我想知道派生密钥是什么?

#include <Windows.h>
#include <stdio.h>

int main()
{
    HCRYPTPROV hProv = 0;
    HCRYPTKEY hKey = 0;
    HCRYPTHASH hHash = 0;
    DWORD dwCount = 5;
    BYTE  rgData[512] = {0x01, 0x02, 0x03, 0x04, 0x05};
    LPWSTR wszPassword = L"pass";
    DWORD cbPassword = (wcslen(wszPassword)+1)*sizeof(WCHAR);

    if(!CryptAcquireContext(
        &hProv, 
        NULL,  
        MS_ENH_RSA_AES_PROV, 
        PROV_RSA_AES, 
        CRYPT_VERIFYCONTEXT))
    {
        printf("Error %x during CryptAcquireContext!\n", GetLastError());
        goto Cleanup;
    }

    if(!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)) 
    { 
        printf("Error %x during CryptCreateHash!\n", GetLastError());
        goto Cleanup;
    } 

    if(!CryptHashData(hHash, (PBYTE)wszPassword, …
Run Code Online (Sandbox Code Playgroud)

c encryption cryptography aes cryptoapi

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

如何获取文件中所有证书的列表?

我希望能够打开一个文件并获取该文件的所有证书列表,并列出每个证书的所有关键信息.

目前,我已经列出了正确列出的第一个证书的关键信息列表CryptQueryObject(),但我找不到任何获取所有证书列表的方法.

是我想要使用的,但我不能使用.NET,我不希望被限制在Windows 8/Server 2012,这里的解决方案可以做到.

c++ windows cryptoapi

5
推荐指数
0
解决办法
381
查看次数

如何禁止"应用程序请求访问受保护的项目"弹出窗口

我试图使用证书解密数据时弹出窗口.我正在创建一个自签名证书,我正在使用它来加密某些数据,但是在尝试解密数据时我收到以下确认弹出窗口:

CryptoAPI弹出窗口

我如何以编程方式授予访问权限以使用证书?

c# security encryption model-view-controller cryptoapi

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

如何通过Coinbase API获取交易费?

通过coinbase API发送交易之前如何获取交易费用?

或者如何通过coinbase API设置交易的交易费用?

cryptoapi bitcoin coinbase-api

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

如何从 API 访问 Kucoin OHLC 数据?

我需要从 Kucoin API 访问 kucoin Open-high-low-close 数据。

查看https://docs.kucoin.com/#get-trade-histories,我推断要访问 OHLC 数据(例如 BTC 与 USDT,带有每小时时间戳),地址应该是这样的:

https://api.kucoin.com/api/v1/market/candles?symbol=BTC-USDT&type=1hour
Run Code Online (Sandbox Code Playgroud)

这样做,我得到了数据的空列表{'code': '200000', 'data': []} (根据 kucoin API doc,代码200000对应于一个好的请求)

我做错了什么?

ps:同样的方法在 kraken api 上效果很好(例如https://api.kraken.com/0/public/OHLC?pair=xbtusd

非常感谢您的帮助!

api json cryptoapi bitcoin cryptocurrency

5
推荐指数
0
解决办法
456
查看次数

Microsoft CryptoApi - 创建由根颁发机构证书签名的新证书

我正在尝试通过临时根 CA 签署公钥/私钥对,接下来的步骤如下:

  1. 创建自签名根权限证书 ( CertCreateSelfSignCertificate)(完成
  2. 生成公钥/私钥对 ( CryptGenKey) (完成)
  3. 通过根权限证书( TODO )签署公钥/私钥对(我一直在尝试使用CertCreateSelfSignCertificate函数,但似乎这是不可能的......)

我一直在遵循下一个链接中提到的步骤: 链接

使用 powershell 工作正常,但我不知道如何使用 Microsoft CryptoApi C++ 实现它。Powershell 示例:

$testCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "SignedByRootCA" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $rootCert
Run Code Online (Sandbox Code Playgroud)

目前,我获得的证书没有私钥,那么如何为我的签名证书分配私钥呢?我当前的代码如下所示:

// Open the CA cert to get the issuer information and a handle to sign the cert
PCCERT_CONTEXT caCert = NULL;
CertificateStore certStore{};
certStore.Open(certStore.ROOT);
certStore.FindCertContext(tmpThumbprint, caCert);
NCRYPT_KEY_HANDLE caKey = NULL;
DWORD …
Run Code Online (Sandbox Code Playgroud)

c++ certificate cryptoapi certenroll wincrypt

5
推荐指数
0
解决办法
1007
查看次数