2012-01-13 191 views
0

我试图使用私钥解密数据。我能够使用RSA和私钥解密密钥。现在我想用解密的密钥解密数据。使用AES对数据进行加密,并使用PHP对随机会话密钥进行加密。 如果有任何例子,请让我知道吗?使用解密密钥解密数据

这是我到目前为止的代码。

static void Main(string[] args) 
    { 
      AsymmetricCipherKeyPair keyPair; 

     string protectedSecret = "U6XksFkhWV4.......eo3fRg=="; 
     var decodedSecret = Convert.FromBase64String(protectedSecret); 

     string iv = "KLnP....wA=="; 
     var decodedIV = Convert.FromBase64String(iv); 

     using (var reader = File.OpenText(@"c:\\private.key")) 
      keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject(); 

     var decryptPKIEngine = new Pkcs1Encoding(new RsaEngine()); 
     decryptPKIEngine.Init(false, keyPair.Private); 

     var secret = Encoding.UTF8.GetString(decryptPKIEngine.ProcessBlock(decodedSecret, 0, decodedSecret.Length)); 

     var protectedData = Convert.FromBase64String("f8..Po="); 
     } 
+0

那你试试?你有什么麻烦? – SLaks 2012-01-13 19:09:45

+0

现在我想用密钥解密受保护的数据。我不知道如何!谢谢你的帮助。 – nav100 2012-01-13 19:12:39

+0

PHP代码在加密时使用AES 256 OFB密码格式。 – nav100 2012-01-13 19:16:08

回答

1

创建RijndaelManaged实例,并设置其KeyIV你的字节数组。

然后,创建一个CryptoStreamCreateDecryptor()用你的密文字节数组包装一个MemoryStream
最后,从CryptoStream读取明文。 (如果它的实际文本,您可能需要使用一个StreamReader)

0

试一下这个替换把必要的字符串在需要的地方

static string PHPDecrypt() 
    {    
     byte[] keyBytes = Convert.FromBase64String("U6XksFkhWV4.......eo3fRg=="); //put in your real values here and below for iv and cipherTextBytes 
     byte[] iv = Convert.FromBase64String("KLnP....wA==""); 
     byte[] cipherTextBytes = Convert.FromBase64String("Put the EncryptedText here"); 

     var symmetricKey = new RijndaelManaged 
     { 
     Mode = CipherMode.CBC, 
     IV = iv, KeySize = 256, 
     Key = keyBytes, 
     Padding = PaddingMode.Zeros 
     }; 

     using (var decryptor = symmetricKey.CreateDecryptor()) 
     using (var ms = new MemoryStream(cipherTextBytes)) 
     using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { 
     var plainTextBytes = new byte[cipherTextBytes.Length]; 
     int decryptedByteCount = cs.Read(plainTextBytes, 0, plainTextBytes.Length); 
     return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); 
     } 
    } 
+0

你的情况下的实际密钥大小是什么.. 128,256,1024 ..例如,你没有在你的初始文章中指定.. – MethodMan 2012-01-13 19:31:41

+0

大小是256. PHP代码使用AES 256 OFB密码格式,而加密。 – nav100 2012-01-13 19:35:29

+0

我更新了KeySize为256.现在试试.. – MethodMan 2012-01-13 19:38:40