我正在寻找使用PKCS#11接口运行一些测试,并想知道微软是否提供了基于软件的实现提供PKCS#11功能?
而不是等待HSM到达并正确配置我宁愿现在开始测试与界面的交互.
我使用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) 我在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.
接下来我想用私钥解密数据,但它不可导出.我见过的所有例子都包括导入密钥.
如何在不导出密钥的情况下解密数据?
我正在使用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?
我想使用 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) 我试图使用证书解密数据时弹出窗口.我正在创建一个自签名证书,我正在使用它来加密某些数据,但是在尝试解密数据时我收到以下确认弹出窗口:

我如何以编程方式授予访问权限以使用证书?
通过coinbase API发送交易之前如何获取交易费用?
或者如何通过coinbase API设置交易的交易费用?
我需要从 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)
非常感谢您的帮助!
我正在尝试通过临时根 CA 签署公钥/私钥对,接下来的步骤如下:
CertCreateSelfSignCertificate)(完成)CryptGenKey) (完成)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) cryptoapi ×10
c++ ×4
cryptography ×3
encryption ×3
bitcoin ×2
mscapi ×2
aes ×1
api ×1
c ×1
c# ×1
certenroll ×1
certificate ×1
coinbase-api ×1
json ×1
keystore ×1
openssl ×1
pkcs#11 ×1
rsa ×1
security ×1
ssl ×1
visual-c++ ×1
wincrypt ×1
windows ×1