UWP平台支持使用Windows系统自带的Data Protection功能进行数据加密,密钥由操作系统进行管理,开发者无需考虑密钥的生成和分发问题。该功能可以将数据加密为只有特定用户才能解密的密文。

要使用Data Protection进行数据加密,需要用到UWP平台的DataProtectionProvider类。该类使用一个称为protectionDescriptor(保护说明符)的字符串来管理数据的权限,LOCAL=user这个protectionDescriptor表示只有当前用户能够解密加密后的密文,而LOCAL=machine这个protectionDescriptor表示当前计算机上的所有用户都能解密这个密文。

下列代码展示了如何使用Data Protection功能加密并解密一段字符串。加密后的字符串只有当前登录的用户才能解密。

async Task<byte[]> Encrypt(string plainText)
{
    DataProtectionProvider provider = new DataProtectionProvider("LOCAL=user");
    var plainBuffer = CryptographicBuffer.ConvertStringToBinary(plainText, BinaryStringEncoding.Utf8);
    var protectedBuffer = await provider.ProtectAsync(plainBuffer);
    CryptographicBuffer.CopyToByteArray(protectedBuffer, out byte[] protectedBytes);
    return protectedBytes;
}

async Task<string> Decrypt(byte[] protectedBytes)
{
    DataProtectionProvider provider = new DataProtectionProvider("LOCAL=user");
    var protectedBuffer = CryptographicBuffer.CreateFromByteArray(protectedBytes);
    var plainBuffer = await provider.UnprotectAsync(protectedBuffer);
    return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, plainBuffer);
}