2011-09-29 45 views
1

我想加密base64字符串中的目標c ..現在我需要在C#中解密以下代碼的輸出...請指教最簡單的方法,因爲我不想安裝任何在服務器上的庫。SSCrypto從Objective C到C#

請指教如何使用C#將指定字符串轉換回base64。

感謝 我對encripting基本目標C代碼64

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
SSCrypto *crypto; 
NSString *password [email protected]"abcdefghijklmnoqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnoqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyzabcdefghijklmnopqrstuvwzyz"; 

NSData *seedData1 = [password dataUsingEncoding:NSUTF8StringEncoding]; 
crypto = [[SSCrypto alloc] initWithSymmetricKey:seedData1]; 

NSString *base64String = @"SUkqAAgAAAARAP4ABAABAAAAAAAAAAABAwABAAAAsAQAAAEBAwABAAAAEAIAAAIBAwABAAAAAQAAAAMBAwABAAAABAAAAAYBAwABAAAAAAAAAAoBAwABAAAAAQAAABEBBAABAAAACgEAABIBAwABAAAAAQAAABUBAwABAAAAAQAAABYBAwABAAAAEAIAABcBBAABAAAA3yUAABoBBQABAAAA2gAAABsBBQABAAAA4gAAACUBBAABAAAAAAAAACgBAwABAAAAAgAAADEBAgAgAAAA6gAAAAAAAADIAAAAAQAAAMgAAAABAAAAQ29tcHJlc3NlZCB3aXRoIFBBTklOSSBJbWFnZSsAAAAmoy1xRBcev/r/LSUkbRxE+cRxGpEdF0Rw2EcNhHDIBcufR2+R0XZJjI6OIj5HjCPRHR9F0R8wCmRwXI6I+eROjiNxpEdkdEdl2R8ujTMMuy+R0R8j5HZvNo2yOzcXyOiPkdFzLsjxHGRwbC5lwJQaQRDaCchYbAxEREREREREREREREREREREREREREREREREI0BuRww+RIyPFw2MSnIccp0yY58fgxZ5EcKaVhJdx//pL0OQwm5EA///WlgnWSAb/+q9KEgt4X+961qgtKkZJCMH/XlnojiSvNBUkmSCPZBiQlT//iR7pdK0tgnwzep3zv//DLtrqmuLDodf/X7w2lasnCq7CWPf/0l2a6sIIRSVjoLFf9/3sMJ+jrkIjeTonRHRtE6N5A86ohEQtF0d6Ijol0IiIiIiIiIiIi0IiIiIiOIiIiIiIiIiIiIiIiIiIiIgwjtb8tBIhXABABA=="; 

[crypto setClearTextWithString:base64String]; 

NSData *cipherText = [crypto encrypt:@"aes256"]; 

NSLog(@"Cipher text: '%@' using %@", [cipherText encodeBase64WithNewlines:NO], @"aes256"); 

NSLog(@" "); 
[ pool release]; 

下面是解密

public static string DecryptString(string base64StringToDecrypt, string passphrase) 
     { 
      //Set up the encryption objects 

      using (AesCryptoServiceProvider acsp = GetProvider(Encoding.Default.GetBytes(passphrase))) 
      { 
       byte[] RawBytes = Convert.FromBase64String(base64StringToDecrypt); 
       ICryptoTransform ictD = acsp.CreateDecryptor(); 
       // TripleDES. 
       //RawBytes now contains original byte array, still in Encrypted state 

       //Decrypt into stream 
       MemoryStream msD = new MemoryStream(RawBytes, 0, RawBytes.Length); 
       CryptoStream csD = new CryptoStream(msD, ictD, CryptoStreamMode.Read); 
       //csD now contains original byte array, fully decrypted 

       //return the content of msD as a regular string 
       return (new StreamReader(csD)).ReadToEnd(); 
      } 

private static AesCryptoServiceProvider GetProvider(byte[] key) 
     { 
      AesCryptoServiceProvider result = new AesCryptoServiceProvider(); 
      result.BlockSize = 128; 
      result.KeySize = 128; 
      result.Mode = CipherMode.CBC; 
      result.Padding = PaddingMode.PKCS7; 

      result.GenerateIV(); 
      result.IV = new byte[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 

      byte[] RealKey = GetKey(key, result); 
      result.Key = RealKey; 
      // result.IV = RealKey; 
      return result; 
     } 

     private static byte[] GetKey(byte[] suggestedKey, SymmetricAlgorithm p) 
     { 
      byte[] kRaw = suggestedKey; 
      List<byte> kList = new List<byte>(); 

      for (int i = 0; i < p.LegalKeySizes[0].MinSize; i += 8) 
      { 
       kList.Add(kRaw[(i/8) % kRaw.Length]); 
      } 
      byte[] k = kList.ToArray(); 
      return k; 
     } 

我的C#代碼,請或建議,如有丟失,如果我做了什麼總值錯.. 我已經失去了超過2天的搜索。

+0

源代碼以上不會使正在使用明確哪種加密模式和填充。你需要檢查你的SSCrypto文檔或者在你的C#代碼中猜測它們。 – poupou

+0

其aes256密碼模式,默認情況下,SSCrypto使用PKCS1填充。請指教如果這是不正確 – batwadi

+1

不正確:aes256不是密碼模式(例如ECB,CBC ...)和PKCS1填充適用於非對稱算法,而不是AES(可能使用PKCS7,零...填充) – poupou

回答

0

您可以使用AesManaged類輕鬆完成此操作。參見:

http://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged.aspx

+0

謝謝穆西,,如果你能提供的例子,將是非常有幫助..我有一些代碼,但它不工作... – batwadi

+0

我發佈的鏈接中有一個代碼示例。這不適合你嗎?如果它不工作,爲什麼不(不會編譯,不正確解碼等)? – MusiGenesis

+0

我已經上傳我的代碼以及哪些不起作用請諮詢,如果你看到任何問題 – batwadi