CryptographicEngine.DecryptAsync投掷" System.InvalidCastException:'指定的演员表无效。' "虽然CryptographicEngine.Decrypt没有

时间:2017-05-27 22:03:20

标签: c# uwp windows-10-universal

我正在尝试在UWP平台上进行加密和解密,并试图找出这个问题。 首先,我加密了我的字符串" Sample语句。"使用以下内容:

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:'指定演员表无效。'"。

但是,当我尝试使用相同的解密时:

IBuffer bufEncryptedSt1r = CryptographicEngine.Decrypt(key, bufToDecrypt, null);

我没有收到任何错误,可以使用以下方法获取解密后的字符串:

CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, bufEncryptedSt1r);

我可能缺少什么想法?

相关信息:

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

1 个答案:

答案 0 :(得分:1)

首先,我使用Cryptographic​Engine类的Decrypt方法测试了您的代码段,它可以正常运行并获得正确的结果。这样您就可以使用Decrypt方法。

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

为什么DecryptAsync方法会抛出异常,这是期望的行为。根据{{​​3}}的评论,您只需要(并且可以)在持久密钥上调用DecryptAsync

  

如果密钥是持久密钥且解密操作需要UI或需要很长时间,请使用DecryptAsync方法而不是Decrypt方法

更多详情请参阅DecryptAsync