在winrt中加密数据的简单方法



我试图用Windows rt加密字符串。之前可以在system.security命名空间中使用ProtectData,但在WinRT中不存在。我尝试使用下面的代码,但它不工作。

public static async Task<string> EncryptSting(string data)
{
    DataProtectionProvider provider = new DataProtectionProvider();
    IBuffer unprotectedData = CryptographicBuffer.ConvertStringToBinary(data, BinaryStringEncoding.Utf8);
    //crashes here
    IBuffer protectedData = await provider.ProtectAsync(unprotectedData);
    return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, protectedData);
}
public static async Task<string> DecryptString(string data)
{
    DataProtectionProvider provider = new DataProtectionProvider();
    IBuffer inputData = CryptographicBuffer.ConvertStringToBinary(data, BinaryStringEncoding.Utf8);
    //crashes here
    IBuffer unprotectedData = await provider.UnprotectAsync(inputData);
    return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, unprotectedData);
}

编辑:异常是

提供的句柄无效。(Exception from HRESULT: 0x80090026)

在加密和解密

时出现在第三行

根据文档,您使用的构造函数只能用于解密,不能用于加密:

用于解密操作的构造函数。在调用UnprotectAsyncUnprotectStreamAsync方法之前使用此构造函数。

对于加密,必须使用另一个构造函数,该构造函数指定是否应该为本地机器、当前用户、特定用户等加密数据。

我不知道为什么它不能在你的情况下解密,但如果加密不起作用,我不确定你在试图解密什么…

尝试以下操作:

public static async Task<string> EncryptSting(string data)
{
    DataProtectionProvider provider = new DataProtectionProvider("LOCAL=user");
    ...
    ...
}

干杯!

相关内容

  • 没有找到相关文章

最新更新