根据http://forums.macrumors.com/showthread.php?t=551476上的讨论,下面的代码可用于RSA加密.密钥("public")的数据类型是SecKeyRef.但是,我不会使用钥匙串,因为我只对密钥是公开的加密感兴趣并且不是秘密.那么甚至可以使用加密API吗?我目前的想法是仅使用我的公钥构造SecKeyRef结构并使用API.但是我不知道如何声明结构.有人知道吗?你认为我的方法会起作用吗?
uint8_t *pPlainText = (uint8_t*) "This is a test";
uint8_t aCipherText[1024];
size_t iCipherLength = 1024;
status = SecKeyEncrypt(public,
kSecPaddingNone,
pPlainText,
strlen((char*) pPlainText ) + 1,
aCipherText,
&iCipherLength);
Run Code Online (Sandbox Code Playgroud) 如何使用 cryptoapi 获取十六进制格式字符串中的证书序列号?我尝试过使用
LPTSTR pszSerial = NULL;
DWORD cbSerial = 0;
CryptBinaryToString(pCertContext->pCertInfo->SerialNumber.pbData,pCertContext->pCertInfo->SerialNumber.cbData,CRYPT_STRING_HEX,NULL,&cbSerial);
pszSerial = new TCHAR[cbSerial];
CryptBinaryToString(pCertContext->pCertInfo->SerialNumber.pbData,pCertContext->pCertInfo->SerialNumber.cbData,CRYPT_STRING_HEX,pszSerial,&cbSerial);
Run Code Online (Sandbox Code Playgroud)
但结果不是我想要的,我可以获得序列号,但它相反。
在C#中,我能够通过以下任一方式对公钥进行哈希验证:
// Import from raw modulus and exponent
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
RSAParameters rsaKeyInfo = new RSAParameters {Modulus = modulus, Exponent = exponent};
rsa.ImportParameters(rsaKeyInfo);
return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}
// Import from XML
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) {
rsa.FromXmlString(xmlPublicKey);
return rsa.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA512"), signature);
}
Run Code Online (Sandbox Code Playgroud)
我需要知道的是,在给定入站RSA公钥的情况下,如何使用CAPI完成同样的事情?
除了了解如何将公钥导入加密提供程序的上下文之外,我还有大多数验证哈希所需的CAPI函数:
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);
CryptCreateHash(hCryptProv, CALG_SHA512, 0, 0, &hHash);
CryptHashData(hHash, pDataToHash, lenDataToHash, 0);
CryptVerifySignature(hHash, pSignature, sigLength, NULL, CRYPT_NOHASHOID);
CryptDestroyHash(hHash);
CryptReleaseContext(hCryptProv, 0);
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在尝试使用Microsoft加密API来计算MD5哈希值,但是我得到的哈希值不正确:
#include <windows.h>
#include <stdio.h>
#include <wincrypt.h>
char* HashMD5(char* data, DWORD *result)
{
DWORD dwStatus = 0;
DWORD cbHash = 16;
int i = 0;
HCRYPTPROV cryptProv;
HCRYPTHASH cryptHash;
BYTE hash[16];
char *hex = "01234567879abcdef";
char *strHash = "00000000000000000000000000000000";
if(!CryptAcquireContext(&cryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
dwStatus = GetLastError();
printf("CryptAcquireContext failed: %d\n", dwStatus);
*result = dwStatus;
return NULL;
}
if(!CryptCreateHash(cryptProv, CALG_MD5, 0, 0, &cryptHash))
{
dwStatus = GetLastError();
printf("CryptCreateHash failed: %d\n", dwStatus);
CryptReleaseContext(cryptProv, 0);
*result = dwStatus;
return NULL;
}
if(!CryptHashData(cryptHash, …Run Code Online (Sandbox Code Playgroud) 我想从Autenticode签名的.Net DLL中提取C#中的公共密钥,而不是公共密钥令牌吗?
我不知道如何拨打红圈内的号码。我想得到它。我尝试从 binance 读取 Restful api 文档和 web-socket api,但响应值不包含此内容,或者可能我错过了一些东西。
那么如何得到这个号码呢?谢谢。