0

我已經編寫了多年的應用程序,但最近我的任務是編寫一個非常簡單的Lightswitch應用程序,作爲我們開發團隊的內部工具,編輯我們當前正在構建的Web應用程序上的開發數據庫。如何編輯視覺工作室lightswitch中的密碼哈希

部分應用程序需要編輯用戶表,並且能夠在數據庫中添加/編輯用戶,因此需要至少能夠在數據庫中寫入加密的散列。

問題是我正在使用外部河流實施爲密碼提供哈希和鹽,而不是任何內置的東西。

所以我的問題是,如何在我設計的屏幕上的任何輸入,我可以接受一個純字符串,然後我的自定義加密保存在數據庫中,我認爲計算屬性可能是什麼我需要,但事實並非如此。

我在C#語言的Visual Studio 2013企業版下使用lightswitch,以.NET 4.5爲基準,SqlServer作爲後端數據存儲。

乾杯 辣妹

+0

您使用HTML或Silverlight LightSwitch客戶端嗎?另外,查看以前輸入的值時,是否仍需要查看未加密的純文本? –

+0

這是一個桌面/ Silverlight客戶端克里斯。如果我可以看到新的價值,我不會感到困擾,但是使用它的人對這些東西來說是非常新的,所以只需在明細的密碼字段中添加純文本密碼,然後讓他們按下保存並知道密碼已經被加密到數據庫的路上對我來說已經足夠了。 – shawty

回答

0

經過一個週末的遊戲(你從來沒有機會在辦公室做這樣的事情:-))我想出了以下解決方案,似乎工作。

在我的情況下,我使用的加密庫是「CryptSharp」Crypt Sharp Home Page,但由於我使用silverlight創建桌面客戶端,cryptsharp由於需要完整的.NET運行時而不會安裝。

這使我開始研究什麼,我不得不在應用程序的數據層訪問:

enter image description here

閱讀一些博客文章和一些MSDN之後,我想通了,我可以鉤更新功能。更具體地說,如果將自定義代碼添加到數據層,則會爲每個數據對象模型獲得「更新」(及其他),因此(通過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; 
    } 

這甜蜜和簡單適用我的加密技術來什麼都被輸入到拯救被點擊之前的表格,然後刷新的形式來顯示加密的密碼和鹽。

我可以做的是使實際密碼爲只讀,並彈出輸入明文密碼,所以沒有混淆,但現在這解決了我的問題。

@克里斯庫克 - 感謝您的建議,它給了我更多探索(我真的不用LightSwitch做很多事情),對事物的新探索總是很有趣。如果你對我如何解決這個問題有任何意見,我仍然有興趣聽到贊成和反對意見。

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 
     } 
    } 
} 
+0

感謝克里斯,我今天晚些時候會看看,現在我在實際數據層中發現了一些看起來很有前途的UserUpdate事件。我正在使用CryptSharp進行加密,因此我不得不放棄在UI級別添加此項功能,因爲圖書館上的Silverlight扼流圈 – shawty

+0

您好克里斯,我已經添加了自己的答案,但仍然對您的反饋感興趣,儘管你明顯比LS做得更多。我大部分時間都花在前端和網頁上。 – shawty