2016-10-16 3 views
-2

暗号化された鍵を復号化しようとすると、間違ったデータ/不正確なデータであるというエラーが表示されます。結果を出さずにしばらく検索しようとしました。これは暗号化コードと解読コードの両方です。 indataは暗号化のためのMACアドレスであり、解読のためのインデタットはテキストファイルから読み取られる。TripleDESCryptoService - 「間違ったデータ」

public string encryptMAC(string indata) 
    { 
     byte[] resultCrypt; 
     UTF8Encoding utf8 = new UTF8Encoding(); 

     TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
     tdes.Mode = CipherMode.ECB; 
     tdes.Padding = PaddingMode.PKCS7; 

     byte[] encrypt = utf8.GetBytes(indata); 

     try 
     { 
      ICryptoTransform encryptor = tdes.CreateEncryptor(); 
      resultCrypt = encryptor.TransformFinalBlock(encrypt, 0, encrypt.Length); 
     } 
     finally 
     { 
      tdes.Clear(); 
     } 

     return Convert.ToBase64String(resultCrypt); 
    } 

     public string decryptMAC(string indata) 
    { 
     byte[] resultDecrypt; 
     UTF8Encoding utf8 = new UTF8Encoding(); 

     TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
     tdes.Mode = CipherMode.ECB; 
     tdes.Padding = PaddingMode.PKCS7; 

     byte[] decrypt = Convert.FromBase64String(indata); 

     try 
     { 
      ICryptoTransform decryptor = tdes.CreateDecryptor(); 
      resultDecrypt = decryptor.TransformFinalBlock(decrypt, 0, decrypt.Length); 
     } 
     catch (CryptographicException ex) 
     { 
      Console.WriteLine(ex); 
     } 
     finally 
     { 
      tdes.Clear(); 
     } 

     return utf8.GetString(decrypt); 
    } 
+0

私はMD5Cryptoからキーを追加しましたが、IVは何ですか? – xDotcom

答えて

0

TripleDESCryptoServiceProviderがキーを生成します。暗号化中に自分で設定したり取り出したりしないと、ではなくで暗号文を復号化できるようになります。あなたがTripleDESCryptoServiceProviderを使用する必要がありますので、DESは弱い鍵の小さなセットを持っていることを覚えておいてください

public string encryptMAC(string indata, byte[] key) 
{ 
    byte[] resultCrypt; 
    UTF8Encoding utf8 = new UTF8Encoding(); 

    TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
    tdes.Mode = CipherMode.ECB; 
    tdes.Padding = PaddingMode.PKCS7; 
    tdes.Key = key; 

    byte[] encrypt = utf8.GetBytes(indata); 

    try 
    { 
     ICryptoTransform encryptor = tdes.CreateEncryptor(); 
     resultCrypt = encryptor.TransformFinalBlock(encrypt, 0, encrypt.Length); 
    } 
    finally 
    { 
     tdes.Clear(); 
    } 

    return Convert.ToBase64String(resultCrypt); 
} 

public string decryptMAC(string indata, byte[] key) 
{ 
    byte[] resultDecrypt= new byte[0]; 
    UTF8Encoding utf8 = new UTF8Encoding(); 

    TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); 
    tdes.Mode = CipherMode.ECB; 
    tdes.Padding = PaddingMode.PKCS7; 
    tdes.Key = key; 

    byte[] decrypt = Convert.FromBase64String(indata); 

    try 
    { 
     ICryptoTransform decryptor = tdes.CreateDecryptor(); 
     resultDecrypt = decryptor.TransformFinalBlock(decrypt, 0, decrypt.Length); 
    } 
    catch (CryptographicException ex) 
    { 
     Console.WriteLine(ex); 
    } 
    finally 
    { 
     tdes.Clear(); 
    } 

    return utf8.GetString(resultDecrypt); 
}

は、私はあなたのメソッドにキーを追加し、暗号化と復号化に同じものを使用することを示唆していますそれらの弱点を除外するための鍵を生成します。有効な鍵は(new TripleDESCryptoServiceProvider()).Keyで生成できます。

+0

私はあなたの変更を行いました。私がメソッドを呼び出すと、キーの入力はどうなりますか?私はバイトに隠し変換しようとしたが、彼らはこのアルゴリズムのために利用可能なキーのサイズはないと言う – xDotcom

+0

私は私の答えに例を追加しました。 –

+0

私はメソッドを呼び出すと変更しました。 decryptMAC(MACAdress、新しいTripleDESCryptoServiceProvider())。 この行では、不正確なデータが再度発生しました。 resultDecrypt = decryptor.TransformFinalBlock(decrypt、0、decrypt.Length); お返事ありがとうございます。 – xDotcom

関連する問題