我正在尝试在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);
答案 0 :(得分:1)
首先,我使用CryptographicEngine
类的Decrypt
方法测试了您的代码段,它可以正常运行并获得正确的结果。这样您就可以使用Decrypt
方法。
IBuffer bufEncryptedStr = CryptographicEngine.Decrypt(key, bufToDecrypt, null);
String strDecrypted = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, bufEncryptedStr);
为什么DecryptAsync
方法会抛出异常,这是期望的行为。根据{{3}}的评论,您只需要(并且可以)在持久密钥上调用DecryptAsync
。
如果密钥是持久密钥且解密操作需要UI或需要很长时间,请使用DecryptAsync方法而不是Decrypt方法
更多详情请参阅DecryptAsync
。