我试图了解如何在XP,Vista和Windows 7中获取从PEM格式导入的公钥(下面的代码中包含的示例).示例代码将导入XP和Windows Vista/7上的密钥,但不是一样的方法.
在Windows XP上,加密提供程序的名称中需要字符串"(Prototype)",并允许调用CryptImportPublicKeyInfo进行传递.
在Windows 7上,"(Prototype)"提供程序显然存在,但不支持对CryptImportPublicKeyInfo的调用,这令人困惑.
这些操作系统之间的正确实现是什么样的?是否有必要检测XP并使用"(Prototype)"请求名称,而没有它用于其他操作系统?是否有可能在某些XP系统上仍会失败?
或者,有没有办法检测这种混乱的行为,并选择哪个加密提供商将支持必要的呼叫?
Windows 7上的输出:
ANALYZING CRYPTOGRAPHIC SUPPORT FOR:
"Microsoft Enhanced RSA and AES Cryptographic Provider"
CryptAcquireContext success.
CryptAcquireContext.1 success.
CryptStringToBinary.2 success.
CryptDecodeObjectEx success.
CryptImportPublicKeyInfo success.
SUCCESS.
ANALYZING CRYPTOGRAPHIC SUPPORT FOR:
"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
CryptAcquireContext success.
CryptAcquireContext.1 success.
CryptStringToBinary.2 success.
CryptDecodeObjectEx success.
CryptImportPublicKeyInfo FAILED****.
Run Code Online (Sandbox Code Playgroud)
Windows XP上的输出:
ANALYZING CRYPTOGRAPHIC SUPPORT FOR:
"Microsoft Enhanced RSA and AES Cryptographic Provider"
CryptAcquireContext success.
CryptAcquireContext.1 success.
CryptStringToBinary.2 success. …Run Code Online (Sandbox Code Playgroud) 我有一个不包含标题栏的Windows窗体应用程序,在Windows 7上,任务栏显示AssemblyTitle的值,而不是表单的Text属性中的值.如何动态更改此值?
谢谢!
我可以GetFileInformationByHandle用来确定与文件关联的硬链接数.如何枚举构成这些链接的路径?
例如,如果C:\TEMP_1.BIN和C:\TEMP_2.BIN是硬链接到相同的内容,我从确定GetFileInformationByHandle那C:\TEMP_1.BIN已经nNumberOfLinks=2,我怎么能找到另一条链路的路径?(例如C:\TEMP_2.BIN)
GetFileInformationByHandle:http:
//msdn.microsoft.com/en-us/library/aa363788%28v=VS.85%29.aspx
在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)
谢谢!
cryptoapi ×2
mscapi ×2
c# ×1
c++ ×1
cryptography ×1
hardlink ×1
ntfs ×1
public-key ×1
rsa ×1
windows ×1
windows-7 ×1
windows-xp ×1
winforms ×1