小编g01*_*01d的帖子

Windows XP与Vista/7上的MS Crypto API行为

我试图了解如何在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)

c++ windows-xp cryptoapi mscapi

9
推荐指数
1
解决办法
6569
查看次数

C# - Windows 7任务栏显示AssemblyTitle而不是Form.Text

我有一个不包含标题栏的Windows窗体应用程序,在Windows 7上,任务栏显示AssemblyTitle的值,而不是表单的Text属性中的值.如何动态更改此值?

谢谢!

c# windows windows-7 winforms

4
推荐指数
1
解决办法
1318
查看次数

如何枚举指向文件的所有NTFS硬链接的路径?

我可以GetFileInformationByHandle用来确定与文件关联的硬链接数.如何枚举构成这些链接的路径?

例如,如果C:\TEMP_1.BINC:\TEMP_2.BIN是硬链接到相同的内容,我从确定GetFileInformationByHandleC:\TEMP_1.BIN已经nNumberOfLinks=2,我怎么能找到另一条链路的路径?(例如C:\TEMP_2.BIN)

GetFileInformationByHandle:http: //msdn.microsoft.com/en-us/library/aa363788%28v=VS.85%29.aspx

ntfs hardlink

4
推荐指数
1
解决办法
1432
查看次数

如何从本机代码中的XML或模数/指数导入RSA公钥,以便与Windows CAPI的CryptVerifySignature一起使用?

在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)

谢谢!

cryptography rsa cryptoapi public-key mscapi

0
推荐指数
1
解决办法
3094
查看次数