【问题标题】:Datagridview, Show editable decrypted string.Datagridview,显示可编辑的解密字符串。
【发布时间】:2011-12-14 20:24:01
【问题描述】:

我可以使用 CellFormatting 事件在 datagridview 中显示解密的加密值来解密。但是如何使它可编辑,以便输入一个新字符串会将其加密到绑定属性,并且仍然显示为已写入(解密)..?一旦我完成对单元格的编辑并离开,它就会在 Decrypt 方法中给出一个异常。

FormatException:Base-64 字符数组的长度无效。

    public static string DecryptData(string stringToDecrypt)
    {
        byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine);
        return Encoding.Unicode.GetString(decryptedData);
    }

【问题讨论】:

标签: c# .net encryption datagridview cryptography


【解决方案1】:

您得到的异常很可能来自该部分:

Convert.FromBase64String(stringToDecrypt) 

stringToDecryptmust 的长度是 4 的倍数。检查是否是这种情况。

【讨论】:

    【解决方案2】:

    如果您总是在加载网格时解密该字段,那么您只需要对其进行加密以将更改保存到数据库中?

    挂钩cellValidating 或类似事件以查看是否有更改以及是否有加密 -> 保存到数据库 -> 然后从数据库刷新/重新加载网格。

    当您重新加载时,您将带来新的 base64 编码版本的字段,然后它将很好地解密,避免该错误

    【讨论】:

    • 确实如此。只要我通过在外面的某处单击鼠标来完成编辑,它就可以正常工作。但是,如果按回车,它会失败并出现上述异常..
    • 那你能用 CellEndEdit 代替吗? msdn.microsoft.com/en-us/library/… ?
    • 这很容易出错,它工作,但仍然通过 exeptions,我认为是因为格式化事件在编辑过程中被多次调用。决定在业务层隐藏这个解密/加密逻辑。我认为更有意义。
    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多