我有一些数据需要保护,所以我使用ProtectedData将其加密到一个文件中。当我试图读取和解密数据时,我得到了一个最奇怪的异常:
CryptographicException -无法更新密码。为新密码提供的值不符合域的长度、复杂性或历史记录要求。
这是它被抛出的地方:
byte[] decryptedData = ProtectedData.Unprotect(Encoding.UTF8.GetBytes(fileContent),
Encoding.UTF8.GetBytes(entropy),
DataProtectionScope.LocalMachine);在使用DataProtectionScope.CurrentUser时也会发生这种情况。
我没有在网上找到任何关于这个异常的信息,所以我几乎一无所知。
发布于 2014-02-18 01:37:08
一些一般性错误不会生成异常,最后一个错误被抛出。
从System.Security.Cryptography.ProtectedDate.Unprotect:内部
throw new CryptographicException(Marshal.GetLastWin32Error());更具体地说,它最像是由于使用实现crypt32.dll的System.Security.Cryptography打开默认标志而失败: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;
}https://stackoverflow.com/questions/20186313
复制相似问题