2017-05-27 5 views
1

私はUWPプラットフォーム上で暗号化と復号化を試みていますが、この問題を解明しようとしています。 まず、「サンプル文」という文字列を暗号化します。その後CryptographicEngine.DecryptAsync throwing "System.InvalidCastException: '指定されたキャストは無効です。' "CryptographicEngine.Decryptはしません

IBuffer bufEncrypted = CryptographicEngine.Encrypt(key, CryptographicBuffer.ConvertStringToBinary(strToEncrypt, BinaryStringEncoding.Utf8), null); 
string strEncrypted = CryptographicBuffer.EncodeToBase64String(bufEncryptedStr); 

、私が使用して "strEncrypted" を解読しようとすると:次のように使用して

IBuffer bufToDecrypt = CryptographicBuffer.DecodeFromBase64String(strEncrypted); 
IBuffer bufEncryptedStr = await CryptographicEngine.DecryptAsync(key, bufToDecrypt, null); 

を私のようにエラーが出ます "System.InvalidCastExceptionの: '指定されたキャストは有効ではありません。'"。しかし

、私が使用して同じ暗号解読を試みる:

​​

私はすべてのエラーを取得しないと、使用して復号化された文字列を取得できます。

CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, bufEncryptedSt1r); 

任意のアイデア私が欠落しているかもしれないもの?

関連情報:

IBuffer bufKeyMaterial = CryptographicBuffer.GenerateRandom(256); 
SymmetricKeyAlgorithmProvider provider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesEcbPkcs7); 
CryptographicKey key = provider.CreateSymmetricKey(bufKeyMaterial); 

答えて

1

はまず、私はそれがうまく機能し、正しい結果を持つことができ、Cryptographic​EngineクラスのDecryptメソッドを使用してコードスニペットを使用してテスト。だからあなたはちょうどDecryptメソッドを使用することができます。 DecryptAsyncメソッドが例外をスローします理由については

IBuffer bufEncryptedStr = CryptographicEngine.Decrypt(key, bufToDecrypt, null); 
String strDecrypted = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, bufEncryptedStr); 

、これは行動を期待しています。 DecryptAsyncの注釈によれば、永続キーにはDecryptAsyncしか必要としません。キーは永続化の鍵であり、復号化処理は、UIを必要とするか、時間がかかる場合this similar threadを参照してください

は、復号化方法の代わりに

詳細をDecryptAsyncメソッドを使用します。

+0

これはMicrosoftのドキュメントにはっきりと記載されていなかった理由がわかりません。私はそれが無効なキャスト例外をスローすることは知らなかった。ありがとう! –

関連する問題