首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CryptographicException -无法更新密码

CryptographicException -无法更新密码
EN

Stack Overflow用户
提问于 2013-11-25 14:49:34
回答 1查看 1.2K关注 0票数 2

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

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

这是它被抛出的地方:

代码语言:javascript
复制
byte[] decryptedData = ProtectedData.Unprotect(Encoding.UTF8.GetBytes(fileContent),
 Encoding.UTF8.GetBytes(entropy),
 DataProtectionScope.LocalMachine);

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-02-18 01:37:08

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

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

代码语言:javascript
复制
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相同的脚本:

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20186313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档