如何在visual studio lightswitch中编辑密码哈希

时间:2016-05-13 08:59:33

标签: c# sql-server visual-studio-lightswitch lightswitch-2013

我多年来一直在编写应用程序,但我最近的任务是编写一个非常简单的Lightswitch应用程序,作为我们的开发团队在我们目前的Web应用程序上编辑开发数据库的内部工具建筑物。

应用程序的一部分需要编辑用户表,并且能够在数据库中添加/编辑用户,因此需要能够至少在数据库中写入加密的哈希值。

问题是我正在使用外部的blowfish实现为密码提供哈希和盐,而不是任何内置的东西。

所以我的问题是这个,我在设计的屏幕上的任何输入如何,我可以接受一个普通的字符串,然后将我的自定义加密保存在数据库中,我认为计算属性可能是我的需要,但事实并非如此。

我在Visual Studio 2013企业中使用的是使用.NET 4.5作为基准线,而SqlServer作为后端数据存储的C#语言中的lightswitch。

干杯 美女

2 个答案:

答案 0 :(得分:1)

一种方法是使用您的密码字段的自定义验证方法,如下所示:

namespace LightSwitchApplication
{
    public partial class User
    {
        partial void Password_Validate(EntityValidationResultsBuilder results)
        {
            this.Password = YourEncryptFunction(this.Password);
        }
    }
}

当您使用Silverlight客户端时,此验证方法将在客户端和服务器层上运行。

如果您需要强制您的代码仅在服务器层上运行(可能因为它在Silverlight领域不支持:-),您需要将代码包装在条件编译指令中如下:

namespace LightSwitchApplication
{
    public partial class User
    {
        partial void Password_Validate(EntityValidationResultsBuilder results)
        {
#if !SILVERLIGHT
            this.Password = YourEncryptFunction(this.Password);
#endif
        }
    }
}

答案 1 :(得分:0)

经过一个周末的游戏(你永远不会有机会在办公室做这样的事情:-))我想出了以下似乎有效的解决方案。

在我的情况下,我使用的加密库是“CryptSharp”Crypt Sharp Home Page,但由于我正在使用silverlight创建桌面客户端,因此无法安装cryptsharp,因为它需要完整的.NET运行时。 / p>

这使我开始调查我在应用程序的数据层访问的内容:

enter image description here

在阅读了一些博客文章和更多MSDN之后,我发现我可以挂钩更新功能。

更具体地说,如果您将自定义代码添加到数据层,您将为每个数据对象模型获得“更新”(和其他),因此(通过NuGet添加CryptSharp之后),我最终得到:< / p>

   partial void Users_Updating(User entity)
    {
        string encryptedPassword = "";
        string encryptedSalt = "";

        GenerateEncryptedPasswordAndSalt(entity.Password, out encryptedPassword, out encryptedSalt);

        entity.Password = encryptedPassword;
        entity.PasswordSalt = encryptedSalt;
    }

在保存点击之前,将我的加密应用到表单中,然后刷新表单以显示加密密码和盐。

我可以做的是,将实际密码设为只读,并弹出输入明文密码,这样就没有混淆,但是现在这解决了我的问题。

@Chris Cook - 感谢您的建议,它给了我更多的探索(说实话,我对LightSwitch真的没有太多帮助)并且对事物的新探索总是很有趣。如果您对我如何解决这个问题有任何意见,我仍然有兴趣听取专业人士的意见。