gpt4 book ai didi

c# - CryptographicException - 无法更新密码

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:00 24 4
gpt4 key购买 nike

我有一些数据要保护,所以我使用 ProtectedData 将其加密到文件中。当我尝试读取和解密数据时,我遇到了最奇怪的异常:

CryptographicException - 无法更新密码。为新密码提供的值不符合域的长度、复杂性或历史要求。

这是它被抛出的地方:

byte[] decryptedData = ProtectedData.Unprotect(Encoding.UTF8.GetBytes(fileContent),
Encoding.UTF8.GetBytes(entropy),
DataProtectionScope.LocalMachine);

使用 DataProtectionScope.CurrentUser 时也会发生这种情况。

我还没有在网上找到关于这个异常的任何信息,所以我几乎一无所知。

最佳答案

一些一般性错误不会产生异常,最后一个错误会被抛出。

从 System.Security.Cryptography.ProtectedDate.Unprotect 内部:

throw new CryptographicException(Marshal.GetLastWin32Error());

更具体地说,它最像失败是因为使用 System.Security.Cryptography 实现 crypt32.dll:CryptUnprotectData 的默认标志 ​​- CRYPTPROTECT_UI_FORBIDDEN - “此标志用于呈现用户界面 (UI) 的远程情况不是一个选项。设置此标志并指定 UI 以进行保护或取消保护时,调用将失败并且 GetLastError() 返回 ERROR_PASSWORD_RESTRICTION 状态代码。” Windows Data Protection

我发现一个适合我的解决方法是不使用 Base64 转换器,我使用与 PowerShell 使用的脚本相同的脚本:

static byte[] ByteArrayFromString(string s)
{
int length = s.Length / 2;
byte[] numArray = new byte[length];
if (s.Length > 0)
{
for (int i = 0; i < length; i++)
{
numArray[i] = byte.Parse(s.Substring(2 * i, 2), NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture);
}
}
return numArray;
}

关于c# - CryptographicException - 无法更新密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com