从snk形式文件导出xml形式的密钥密钥对供程序使用,不知道怎样实现?给程序集签名的的时候用到snk密钥文件,在程序中有时候也要用到公私钥加密,我想就用一套加密钥匙,所以怎样从snk形式文件导出xml形式的密钥密钥对呢?看看我尝试的过程(总是不成功):
使用   SN.exe   -k制出snk文件  
使用   sn   -m   n   切换到用户模式  
使用sn   -i   *.snk   MyContainer将密钥对导入名为“MyContainer”的密钥容器中  使用程序:  
CspParameters   cp   =   new   CspParameters();  
cp.KeyContainerName   =   "MyContainer";  
RSACryptoServiceProvider   rsa   =   new   RSACryptoServiceProvider(cp);  
textBox1.text=rsa.ToXmlString(false);  发现得出的xml格式公匙并不是snk中对应的  
验证过程如下:  
记住xml格式公匙  
使用sn   -d   MyContainer删除容器  
再重新导入:使用sn   -i   *.snk   MyContainer将密钥对导入名为“MyContainer”的密钥容器中
并重新运行程序,发现得出的xml格式公匙和上一次不一样  发现容器名称是对应的,好像密钥不一样。如果没有使用SN创建密钥容器,运行这段程序可以自动创建同名的密钥容器,用SN可以删除程序创建的同名容器  到底该怎样从snk形式文件导出xml形式的密钥对呢?趁着[可用分回赠参与]这条船求个答案,不敢企望得多少分,也许问题本不值一个问题,望大虾们随手麻烦回复一下

解决方案 »

  1.   

       cp.Flags = CspProviderFlags.UseExistingKey; 使用本机的容器, 要不然每次执行都新建一组密钥
      

  2.   

    还是不行************** 异常文本 **************
    System.Security.Cryptography.CryptographicException: 该项不存在。   在 System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
      

  3.   

    下面的异常说明没有将 *.snk 密钥导入的本地的container中,所以才产生一下的错误。************** 异常文本 ************** 
    System.Security.Cryptography.CryptographicException: 该项不存在。   在 System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)应该检查一下错误出现在哪一行,如果是出现在RSACryptoServiceProvider  = new  RSACryptoServiceProvider(cp);  则表示本地没有那个密钥,
    如果出现在textBox1.text=rsa.ToXmlString();可能是导出错误。
    另外也可以试试用pem p12 等其他密钥类型使用sn.exe 导入。