VFP实体框架提供程序将加密密码作为空字符串

时间:2014-07-04 10:38:03

标签: c# entity-framework foxpro visual-foxpro

我正在使用VFP Entity Framework Provider for .NET(EF)从VFP数据库中读取数据。 在用户表中有一个密码列。当我在VFP中的密码单元格中获得焦点时,我可以轻松复制该值并对其进行编辑:

Normal password field

在.NET端,读取的值没有任何问题。

现在有一段时间有一个特殊的行,其密码带有尾随空格:

Password with trailing spaces without

当我把焦点放在那个单元格中时,VFP就像没有任何价值一样:

Password with trailing spaces cell with focus

当我使用Entity Framework在我的程序中检索该用户时,我得到一个空字符串。我不知道这个密码是如何生成的,我所知道的是它适用于使用数据库的原始VFP程序。其他密码没有问题,这种情况很少发生,但重复发生。

这种行为的来源是什么?是否有解决方法在.NET或VFP端检索正确的值?

3 个答案:

答案 0 :(得分:1)

我在存储之前对加密密码进行Base64编码,并在使用之前将其反转。因此,它只能使用可打印字符存储。

答案 1 :(得分:1)

我与EF的VFP提供商的创建者Tom Brothers联系,同时发布了这个问题。他花了很多时间,实际上得出了以下诊断结果:

  

问题是无效密码的第一个字符实际上是null(ascii 0)。通常,空字符用作字符串终止符。鉴于这种情况.Net返回一个空字符串,因为它在null之前没有找到任何字符。您可以通过在其中一个工作密码的中间插入一个null来验证事物是否按照我描述的方式工作,以查看它(“它”是.Net或浏览窗口)在null之后不返回任何字符。 但是在你的情况下真正讨厌的事情是VFP在直接访问表字段时似乎没有使用null作为终止符...这与单击单元格以编辑时的浏览窗口的工作方式不一致值

这不是问题的解决方案,而是构成最完整的答案。谢谢汤姆!

答案 2 :(得分:0)

我可能会与Alan一起将其存储在base-64中,因为不可打印的字符看起来像空格但不是...... VFP有一个" cryptor"类和那可能是字符串的存储。现在,如果现有的VFP应用程序仍然使用这些密码,您显然不希望破坏该应用程序级别访问与E / F C#解决方案。