2017-08-25 5 views
-1

UnityアンドロイドビルドでAESを使用して文字列を解読するときに、ヌル参照例外を取得する。そのいくらかのHMAC初期化エラー。Unity C#:HMACの初期化スローとエラー。それを解決する方法

私はsystem.cryptorgraphyのAES暗号化と復号化アルゴリズムを使用してゲームで暗号化を使用していますが、Androidデバイスでエラーが発生しています。 HMAC Initialise()が何であるか、そしてこのエラーを解決する方法について誰かが考えていますか?私は解読するために使用しているコードを貼り付けました。

エラーのスクリーンショットはすべて以下に添付されています。

public string Decrypt (string cipherText) 
{ 
    string EncryptionKey = "abc123"; 
    cipherText = cipherText.Replace (" ", "+"); 
    byte[] cipherBytes = Convert.FromBase64String (cipherText); 
    using (Aes encryptor = Aes.Create()) { 
     Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes (EncryptionKey, new byte[] { 
      0x49, 
      0x76, 
      0x61, 
      0x6e, 
      0x20, 
      0x4d, 
      0x65, 
      0x64, 
      0x76, 
      0x65, 
      0x64, 
      0x65, 
      0x76 
     }); 
     encryptor.Key = pdb.GetBytes (32); 
     encryptor.IV = pdb.GetBytes (16); 
     using (MemoryStream ms = new MemoryStream()) { 
      using (CryptoStream cs = new CryptoStream (ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) { 
       cs.Write (cipherBytes, 0, cipherBytes.Length); 
       cs.Close(); 
      } 
      cipherText = Encoding.Unicode.GetString (ms.ToArray()); 
     } 
    } 
    return cipherText; 
} 

enter image description here

私は、私は重複を見つけることStackOverflowのに非常に新しい試みたのですが、私は失敗しました。質問が重複していると思われる場合は、リンクを提供してください。

+0

[完璧な質問方法](https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)と[最小、完全、およびVerifableの作成方法例](https://stackoverflow.com/help/mcve)をクリックして、あなたの質問をすぐに編集してから、下降して埋められます。 –

+0

提案をお寄せいただき、ありがとうございます。 –

+0

HMACは、特定のパスワード(および塩)から鍵を生成するために* within * Rfc2898DeriveBytesで使用されます。それは初期化されていない理由を説明していません。また、なぜハッシュが最初に呼び出され、次にHMACが呼び出されるのかは説明しません。私があなたに与えることができる唯一のアイデアは、反復回数(静的な塩の値の背後にある整数、たとえば40,000程度に設定されている)をさらに受け取るコンストラクタもあるということです。静塩は、無用の塩の隣にあることに注意してください。 –

答えて

0

私は解決策を得ました。 HMAC .Net2.0を使用するにはリフレクションを使用し、ビルド時には.Net 2.0サブセットを使用していたため、暗号化を使用するために必要なすべてのコードを削除していたため、null refを取得していました。

関連する問題