【Dotnet 工具箱】WPF UI

2023-04-19 12:02:52

1.WPF UI - 現代化設計的開源 WPF 框架

WPF UI 是一個基於 C# 開發的, 擁有 4k star 的開源 UI 框架。WPF UI 在 WPF 的基礎上,提供了更多的現代化,流利的,直觀的設計和元件。重要的是,WPF UI 完全免費!

如果你對 WPF 比較熟悉,那麼可以很快的上手這個 UI 框架,並整合中專案中去。WPF UI 提供了完善的使用檔案,對新手非常友好。

截圖

如何使用

  1. 使用 Visual Studio 中的 Nuget 包管理器,安裝 WPF-UI

  2. 更新 App.xaml 檔案,如下

    <Application 
      xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml">
      <Application.Resources>
        <ResourceDictionary>
          <ResourceDictionary.MergedDictionaries>
            <ui:ThemesDictionary Theme="Dark" />
            <ui:ControlsDictionary />
          </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
      </Application.Resources>
    </Application>
    
  3. 試試 WPF-UI 的按鈕, 盡情使用吧!

    <ui:UiWindow
      ...
      xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml">
      <Grid>
        <ui:Button
          Content="Hello World"
          Icon="Fluent24"/>
      </Grid>
    </ui:UiWindow>
    

專案地址: https://wpfui.lepo.co/

2.開源力作!使用 Blazor 和 C# 構建 K8s Dashboard

blazor-k8s

blazor-k8s 是一個開源專案,它使用了 blazor 和 C# 構建了 k8s dashboard。允許使用者在介面上直接操作 k8s,進行資源管理。

部署

1 k8s部署體驗

一鍵安裝

kubectl apply -f https://raw.githubusercontent.com/weibaohui/blazork8s/main/deploy/deployment.yaml

存取

預設使用了nodePort開放,請存取31999埠 http://NodePortIP:31999

docker 體驗
啟動伺服器

docker run -d --name blazork8s  -v ~/.kube/:/root/.kube/ -p 4001:443 -p 4000:80 ghcr.io/weibaohui/blazork8s:latest

介面預覽

專案地址:https://github.com/weibaohui/blazork8s

3. Dotnet 加解密演演算法庫

CryptoNet

CryptoNet 是一個簡單、快速且輕量級的非對稱和對稱加密 NuGet 庫,支援跨平臺 Windows、Linux。不依賴其他庫, 100% C# 實現。

CryptoNet 可以通過兩種方式使用:

  • 對稱方式
  • 非對稱方式

對稱方式

您使用相同的金鑰進行加密和解密。

非對稱方式

通過非對稱方式,CryptoNet 可以使用自己生成的 RSA 金鑰對(私鑰/公鑰)來加密和解密內容。

您可以將私鑰儲存在一臺或多臺機器上。公鑰可以輕鬆分發給所有使用者端。

使用範例

1.使用對稱金鑰加密和解密內容

在下面範例中,CryptoNetAes 生成隨機的金鑰和 iv。

ICryptoNet cryptoNet = new CryptoNetAes();
var key = cryptoNet.ExportKey();

ICryptoNet encryptClient = new CryptoNetAes(key);
var encrypt = encryptClient.EncryptFromString(ConfidentialDummyData);

ICryptoNet decryptClient = new CryptoNetAes(key);
var decrypt = decryptClient.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);

2.使用匯出和匯入, 自己生成的對稱金鑰,來加密和解密內容

ICryptoNet cryptoNet = new CryptoNetAes();
var file = new FileInfo(SymmetricKeyFile);
cryptoNet.ExportKeyAndSave(file);

Debug.Assert(File.Exists(file.FullName));

var encrypt = cryptoNet.EncryptFromString(ConfidentialDummyData);
        
ICryptoNet cryptoNetKeyImport = new CryptoNetAes(file);
var decrypt = cryptoNetKeyImport.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);

3. 生成非對稱 Rsa 金鑰對,匯出私鑰和公鑰,使用公鑰加密和使用私鑰解密

ICryptoNet cryptoNet = new CryptoNetRsa();

cryptoNet.ExportKeyAndSave(new FileInfo(PrivateKeyFile), true);
cryptoNet.ExportKeyAndSave(new FileInfo(PublicKeyFile), false);

Debug.Assert(File.Exists(new FileInfo(PrivateKeyFile).FullName));
Debug.Assert(File.Exists(new FileInfo(PublicKeyFile).FullName));

ICryptoNet cryptoNetPubKey = new CryptoNetRsa(new FileInfo(PublicKeyFile));
var encrypt = cryptoNetPubKey.EncryptFromString(ConfidentialDummyData);

ICryptoNet cryptoNetPriKey = new CryptoNetRsa(new FileInfo(PrivateKeyFile));
var decrypt = cryptoNetPriKey.DecryptToString(encrypt);

Debug.Assert(ConfidentialDummyData == decrypt);

4. 使用 X509 證書用公鑰加密,然後用私鑰解密

X509Certificate2? certificate = CryptoNetUtils.GetCertificateFromStore("CN=Maytham");

ICryptoNet cryptoNetWithPublicKey = new CryptoNetRsa(certificate, KeyType.PublicKey);
var encryptWithPublicKey = cryptoNetWithPublicKey.EncryptFromString(ConfidentialDummyData);

ICryptoNet cryptoNetWithPrivateKey = new CryptoNetRsa(certificate, KeyType.PrivateKey);
var decryptWithPrivateKey = cryptoNetWithPrivateKey.DecryptToString(encryptWithPublicKey);

Debug.Assert(ConfidentialDummyData == decryptWithPrivateKey);

專案地址: https://github.com/maythamfahmi/CryptoNet