我正在寻找与私钥文件夹进行交互的方法(本质上是找到一个私钥以尝试与公钥配对,因为公钥尚未与之配对)certutil -repairstore功能基本上就是我正在寻找-我相信能够使用代码迭代私钥将帮助我实现这一目标
仅尝试从这些文件中读取所有字节并将它们作为Cspblob导入RSACryptoProvider中是行不通的。给出“提供程序的错误版本”错误。
startInfo.FileName = "cmd.exe";
startInfo.Arguments = @"/C certutil -repairstore my " + selectedCertificate.Thumbprint;
startInfo.Verb = "runas";
这是我当前的变通方法命令行用法,但我不喜欢在可能的情况下使用命令行-这不是我可以使用或操作的对象,它具有与我要结束的功能相似的功能做。
答案 0 :(得分:0)
下面是小的测试代码段。在偏移量0x28处,有一个容器名称可用于加载Key参数。我找不到有关私钥文件格式的任何文档,因此可能无法在所有情况下都起作用。
public static RSAParameters LoadParametersFromFile(string fileName)
{
int provType = 1;
string provName = "Microsoft Enhanced Cryptographic Provider v1.0"
// Load key container name;
StringBuilder containerName = new StringBuilder();
using (var keyFile = File.OpenRead(fileName))
{
keyFile.Position = 0x28;
int c;
while ((c = keyFile.ReadByte()) != 0 && c !=-1) containerName.Append((char) c);
}
CspParameters csp = new CspParameters(provType, provName);
csp.Flags = CspProviderFlags.UseMachineKeyStore; // set it accordingly
csp.KeyContainerName = containerName.ToString();
using (RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(csp))
{
RSAParameters loadedParams = rsaKey.ExportParameters(false);
return loadedParams;
}
}
测试电话:
var rsaParams = LoadParametersFromFile(@"C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\0034dc1b91df7f7d75df774fa568bc73_ba648dc7-2ead-41db-8cde-e6f84e3fb1cc");
rsaParams.Modulus 将包含公钥。