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

How do I edit a password hash in visual studio lightswitch

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

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

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

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

我在 visual studio 2013 enterprise 下使用 C# 语言的 lightswitch,以 .NET 4.5 作为基线,SqlServer 作为后端数据存储。

干杯 美女

一种方法是按照以下几行使用密码字段的自定义验证方法:

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

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

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

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

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

在我的例子中,我使用的加密库是 "CryptSharp" Crypt Sharp Home Page,但是因为我正在使用 silverlight 创建桌面客户端,所以 cryptsharp 不会安装,因为它需要一个完整的 . NET 运行时。

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

在阅读了几篇博文和更多 MSDN 之后,我发现我可以 hook 一个更新函数。

更具体地说,如果您将自定义代码添加到数据层,您会为每个数据对象模型获得一个 "Updating"(和其他),因此(在通过 NuGet 添加 CryptSharp 之后),我结束了最多:

   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 的了解并不多),新的探索总是很有趣。如果您对我如何解决这个问题有任何意见,我仍然有兴趣听取利弊。