如何为 Xamarin 应用程序创建离线验证系统?

How can I create an offline validation system for a Xamarin app?

我创建了一个可以完全离线运行的 Xamarin 应用程序。

我想实施某种机制来验证带有 Key/Password 的应用程序。

我有以下想法:

  1. 从带有按钮的应用中生成一种随机密钥。
  2. 从另一个应用程序,输入上一个密钥并生成最终密钥。
  3. 最后在应用中输入新生成的密码。

是否可以做类似的事情?有什么方法可以做到吗?

任何需要提示或帮助的人都将不胜感激。

根据您的要求,您可以制作32位随机字符生成器,​​并将这个32位随机字符复制到另一个应用程序中进行MD5加密。然后用MD5结果来验证。

主APP

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        KeyLabel.Text = CDKMaker();
        Clipboard.SetTextAsync(KeyLabel.Text);
    }
    public string CDKMaker()
    {
        var key = Guid.NewGuid().ToString().Replace("-", "").Substring(0);
        var value = EncryptString(key);
        Preferences.Set("my_key", value);
        return key;
    }
    private string EncryptString(string str)
    {
        MD5 md5 = MD5.Create();

        byte[] byteOld = Encoding.UTF8.GetBytes(str);
        byte[] byteNew = md5.ComputeHash(byteOld);

        StringBuilder sb = new StringBuilder();

        foreach (byte b in byteNew)
        {

            sb.Append(b.ToString("x2"));
        }

        return sb.ToString();
    }

    private void Login(object sender, EventArgs e)
    {
        if (PWLabel.Text == Preferences.Get("my_key", "default_value"))
        {
            // login successfully
        }
        else
        {
            //login faild 
        }
    }
}

xaml

<StackLayout Orientation="Vertical" Padding="0,44,0,0">
    <Label x:Name="KeyLabel" Text="This original Key"  VerticalOptions="Center"/>
    <Button Text="Make 32 Bit Random" Clicked="Button_Clicked"/>
    <Entry x:Name="PWLabel"  Placeholder="Please input password" VerticalOptions="Center" />
    <Button Text="Login" Clicked="Login"/>
</StackLayout>

另一个APP

private async void Button_Click(object sender, RoutedEventArgs e)
{
    // Main app has insert the cdk into clipboard. please press ctrl + v pasted.
    var Password = EncryptString(cdk);
  
}
public static string EncryptString(string str)
{
    MD5 md5 = MD5.Create();

    byte[] byteOld = Encoding.UTF8.GetBytes(str);
    byte[] byteNew = md5.ComputeHash(byteOld);
   
    StringBuilder sb = new StringBuilder();

    foreach (byte b in byteNew)
    {
        
        sb.Append(b.ToString("x2"));
    }
   
    return sb.ToString();
}