2017-05-01 15 views
6

かなり標準的なアルゴリズムを使用して文字列を復号しようとしています。aspnetコアの文字列の暗号化と復号化

System.Security.Cryptography.CryptographicException:私はエラーを取得しておく

public static string DecryptString(string cipherText) 
    { 
      string keyString = string.Empty; 

      // Check whether the environment variable exists. 
      keyString = Environment.GetEnvironmentVariable("EncryptKey"); 

      if (keyString == null) 
      { 
       keyString = "E546C8DF278CD5931069B522E695D4F2"; 
      } 

      var fullCipher = Convert.FromBase64String(cipherText); 



      using (var aesAlg = Aes.Create()) 
      { 
       byte[] iv = new byte[aesAlg.BlockSize/8]; 
       var cipher = new byte[16]; 

       Buffer.BlockCopy(fullCipher, 0, iv, 0, iv.Length); 
       Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, iv.Length); 
       var key = Encoding.UTF8.GetBytes(keyString); 

       using (var decryptor = aesAlg.CreateDecryptor(key, iv)) 
       { 
        string result; 
        using (var msDecrypt = new MemoryStream(cipher)) 
        { 
         using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) 
         { 
          using (var srDecrypt = new StreamReader(csDecrypt)) 
          { 
           result = srDecrypt.ReadToEnd(); 
          } 
         } 
        } 

        return result; 
       } 
      } 

指定されたパディングモードは、このアルゴリズムは有効ではありません。

私はまだこの時点でエラーが発生します。この

var iv = new byte[16]; 
var cipher = new byte[16]; 

それとも

var iv = aesAlg.IV; 

のような複数の方法を試してみました。私は間違って何をしていますか?

+0

[指定されたキーはこのアルゴリズムの有効なサイズではありません](http://stackoverflow.com/questions/2919228/specified-key-is-not-a-valid-size-for-this-algorithm) ) – Eris

+0

メッセージはどのように暗号化されましたか、PHP mcryptのようなどの言語と実装 – zaph

+2

[@ w2olves]あなたはそれを解決しましたか? –

答えて

-3

キーストリームの値を構築する際に重要な点は注意してください。

ケース1:キー文字列値が無効進値が含まれている場合

keyString = Environment.GetEnvironmentVariable("EncryptKey"); 

は、例えば、「E546C8DF278CD5931069B522E695D4F G」、キー文字列は、文字の最後に無効な16進値を持っている、あなたがされますと仮定すると、 「指定されたパディングモードは、このアルゴリズムには有効ではありません。」のエラーメッセージが表示されます

別の原因は、キー文字列は、例えば、小文字であるである、「E 546C8DF278CD5931069B522E695D4F2 "と同様のエラーが表示されます。

おそらく、格納されている「EncryptKey」は無効な16進数のキーです。

ケース2:キー文字列は、32文字のサイズ内に入っていない(他の場合)

これはあなたに、その後、Specified key is not a valid size for this algorithm

32進数の文字を持っていないキー文字列を仮定に記載されています"指定されたキーはこのアルゴリズムの有効なサイズではありません。"

このヘルプが必要です。ハッピーコーディング。

関連する問題