我已经设法在我的应用程序中使用Sun的MSCAPI提供程序.我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了密码.这是一个问题,因为我需要在Web服务中使用加密功能.
这是我现在的代码:
String alias = "Alias to my PK";
char[] pass = "MyPassword".toCharArray();
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, pass);
Provider p = ks.getProvider();
Signature sig = Signature.getInstance("SHA1withRSA",p);
PrivateKey key = (PrivateKey) ks.getKey(alias, pass)
sig.initSign(key);
sig.update("Testing".getBytes());
sig.sign();
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但是当最后一行运行时,我会弹出一个要求输入密码的弹出窗口.我该如何预防呢?
我最近发现了一个非常明显的Microsoft CryptoAPI问题解决方案.由于(看似无关的)CREDHIST文件上的只读标志,整个CryptoAPI堆栈从CryptAcquireContext()向上突然行为不端.为了更大的共同利益,我希望在MS KB中记录它,它属于它.
从我过去对MS KB的攻击我知道陌生人不应该提交文章; 只有MS员工和承包商才这样做.所以我正在寻找一个MS代表赞助商,代表我提交文章.信用无关紧要; 文章无论如何都是匿名的.
完整的文章:http: //social.msdn.microsoft.com/Forums/en/windowssecurity/thread/11b08625-b432-4667-ab82-a7e0ed008fc3
在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
,定义CERT_CHAIN_ENGINE_CONFIG
是
typedef struct _CERT_CHAIN_ENGINE_CONFIG {
DWORD cbSize;
HCERTSTORE hRestrictedRoot;
HCERTSTORE hRestrictedTrust;
HCERTSTORE hRestrictedOther;
DWORD cAdditionalStore;
HCERTSTORE* rghAdditionalStore;
DWORD dwFlags;
DWORD dwUrlRetrievalTimeout; // milliseconds
DWORD MaximumCachedCertificates;
DWORD CycleDetectionModulus;
*#if (NTDDI_VERSION >= NTDDI_WIN7)
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
#endif*
} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG;
Run Code Online (Sandbox Code Playgroud)
我在XP sp3机器中使用visual studio 2010,在这种情况下,我希望上面结构中的以下两个成员变灰.但这不会发生,
#if (NTDDI_VERSION >= NTDDI_WIN7)
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
#endif
Run Code Online (Sandbox Code Playgroud)
NTDDI_VERSION
反过来定义sdkddkver.h
如下,并且_WIN32_WINNT
以某种方式取得NTDDI_WIN7
我的情况下的值不正确,因为我的是XP SP3机器.
#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
#define _WIN32_WINNT 0x0601
#endif
#ifndef NTDDI_VERSION
#ifdef _WIN32_WINNT
// …
Run Code Online (Sandbox Code Playgroud) 哪个更好的使用openssl或windows capi进行ecnryption问题是什么是两者的pro和con列表.如果有可能在openssl上编写我的加密程序并使用windows capi解密它没有问题或者存在一些问题.
客户端应用程序必须从Windows证书存储区访问证书.搜索输入是X500字符串格式的主题名称,如下所示.
"C=CH, S=Aargau, L=Baden, O=Test, OU=FF, CN= Test Root"
Run Code Online (Sandbox Code Playgroud)
需要完全匹配(不使用CERT_FIND_SUBJECT_STR进行子字符串匹配).为此我做了以下几点
CERT_NAME_BLOB subjectname = {0};
/*convert the input X500 string to encoded subject name*/
bRet = CertStrToNameA(X509_ASN_ENCODING, "C=CH, S=Aargau, L=Baden, O=Test, OU=S1, CN= Test Root", CERT_X500_NAME_STR, NULL, NULL, &size, NULL);
if(TRUE == bRet)
{
subjectname.pbData = (BYTE*)malloc(size);
subjectname.cbData = size;
bRet = CertStrToNameA(X509_ASN_ENCODING , "C=CH, S=Aargau, L=Baden, O=Test, OU=S1, CN=Test Root", CERT_X500_NAME_STR, NULL, subjectname.pbData, &subjectname.cbData, NULL);
if(TRUE == bRet)
{
capiCertificate = CertFindCertificateInStore(hStore, X509_ASN_ENCODING, 0, CERT_FIND_SUBJECT_NAME, &subjectname, NULL);
if (NULL == …
Run Code Online (Sandbox Code Playgroud) 美好的一天.Stackoverflow以前帮了我很多次,但是我有点困在这个上,希望有人可以给我一些指示.
背景:我需要将证书的X509数据传递给Adobe的SDK CertListCab,以便使用我的Acrobat插件api对PDF进行签名.
我的问题是如何使用CryptoAPI从PFX证书中获取X509数据?
我做了以下事情:
将我的PFX证书转换为内存存储.
CRYPT_DATA_BLOB data;
打开文件并填充数据.
Run Code Online (Sandbox Code Playgroud)FILE *fIn = fopen("C:\\certificate\\MyPfx.pfx", "rb") fseek(fIn, 0, SEEK_END); data.cbData = ftell(fIn); fseek(fIn, 0, SEEK_SET); data.pbData = (BYTE *)malloc(data.cbData); fread(data.pbData, 1, data.cbData, fIn); fclose(fIn);
HCERTSTORE hCertStore = PFXImportCertStore(&data, L"password", 0);
找到证书.只有一个.
PCCERT_CONTEXT hContext = CertFindCertificateInStore (hCertStore, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_FIND_ANY, NULL, NULL);
获取证书的公钥信息.
BOOL bFreeHandle; HCRYPTPROV hProv; DWORD dwKeySpec; HCRYPTKEY hCertPubKey;
CryptAcquireCertificatePrivateKey (hContext, 0, NULL, &hProv, &dwKeySpec, &bFreeHandle);
CryptImportPublicKeyInfo(hProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &hContext->pCertInfo->SubjectPublicKeyInfo, &hCertPubKey));
现在我尝试为X509数据腾出空间.
DWORD dwX509Len;
BYTE *x509Data;
CryptGetKeyParam(hCertPubKey,KP_CERTIFICATE,NULL,&dwX509Len,0);
x509Data …
这是我的代码:
EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
printf("%s", pub->X);
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,上面写着"类型'struct ec_point_st'的不完整定义".我也尝试过:
EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_secp521r1);
BN_CTX *ecctx= BN_CTX_new();
EC_KEY *eckey = EC_KEY_new();
EC_KEY_generate_key(eckey);
const EC_POINT *pub = EC_KEY_get0_public_key(eckey);
NSLog(@"%s", EC_POINT_point2hex(curve, pub, POINT_CONVERSION_HYBRID, ecctx));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到一个EXC_BAD_ACCESS错误.如何打印(用于调试)公钥的x和y点?
openssl cryptography objective-c cryptoapi public-key-encryption
我试图在Windows 7上使用带有CryptoAPI的SHA2-512,但是,调用CryptCreateHash
失败GetLastError()
= 2148073480 = 0x80090008,即"指定了无效的算法".根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549%28v=vs.85%29.aspx,自Windows XP SP3起,SHA2应该可用.
这是我正在使用的代码:
HCRYPTPROV hCryptProv;
CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
HCRYPTHASH hHash;
if (!CryptCreateHash(hCryptProv, CALG_SHA_512, 0, 0, &hHash)) {
DWORD err = GetLastError(); // -> 2148073480=0x80090008
}
Run Code Online (Sandbox Code Playgroud)
用CALG_SHA1
而不是CALG_SHA512
工作.
我是否必须进行一些进一步的初始化,例如明确激活SHA2?
我们的一款产品目前使用CryptGenRandom API 来生成随机数。最近,我遇到了 Cryptography API: Next Generation (CNG),它为此提供了一个新的 API BCryptGenRandom(在 bcrypt.h 中)。根据 MSDN 中提供的描述 - 两个 API 均符合 Windows Vista Service Pack 1 (SP1) 及更高版本中的 NIST SP800-90 标准。
我正在尝试在 okex 交易所版本 5 上使用 ccxt 创建永久限价订单。该 API 成功在现货交易所下订单(限价订单和市价订单),但在永续交易所上失败。这就是我正在尝试的-
exchange_swap = ccxt.okex5({
'apiKey': credentials['okex']['apikey'],
'secret': credentials['okex']['secretkey'],
'password': credentials['okex']['password'],
'options': {
'defaultType': 'swap',
}
})
params = {
"test":True
}
order = exchange_swap.createLimitBuyOrder('XRP-USDT-SWAP',100,0.7)
Run Code Online (Sandbox Code Playgroud)
错误信息-
ccxt.base.errors.BadRequest: okex5 {"code":"1","data":[{"clOrdId":"","ordId":"","sCode":"51000","sMsg":"Parameter posSide error ","tag":""}],"msg":""}
Run Code Online (Sandbox Code Playgroud)
在搜索此错误后,我在他们的文档中发现了这一点-
Error message Http status code Error code
Parameter {0} error. 400 51000
Run Code Online (Sandbox Code Playgroud)
文档链接 - Okex v5
PS - 我可以通过 okex 上的交易仪表板放置此内容,但不能通过 API 放置。我有足够的余额来创建此订单。
整个错误消息是这样的——
Traceback (most recent call last):
File "C:\Users\ishaa\Desktop\trading\Crypto Vibhor\Testing Files\ccxt_test.py", line 70, in
<module>
order = exchange_swap.createLimitBuyOrder('XRP-USDT-SWAP',100,0.7) …
Run Code Online (Sandbox Code Playgroud) cryptoapi ×10
c++ ×5
cryptography ×5
certificate ×2
openssl ×2
windows ×2
c ×1
ccxt ×1
encryption ×1
java ×1
objective-c ×1
pfx ×1
python ×1
rest ×1
security ×1
sha ×1
trading ×1
visual-c++ ×1
winapi ×1
x509 ×1