我一直试图找到一种方法来阻止人们篡改我的软件附带的许可证文件.我一直在研究RSA并使用签名来验证数据.
现在根据我的理解,我基本上有一些数据(许可证文件),我使用RSACryptoServiceProvider的SignData方法为数据创建签名,其中包含通过ExportParameters(true)创建的公钥和私钥.
然后,我将使用软件提供许可证文件和公钥,以便我可以使用VerifyData验证客户端上的数据(许可证),但是什么是阻止用户创建自己的公钥/私钥对并重新创建数据并覆盖公钥和数据?
我一直在阅读并做一些谷歌搜索,但我仍然坚持这一点,我也很新加密和签署,但我需要弄清楚这一点.
我知道,确保像文件这样的许可证几乎是不可能的,因为他们希望他们只能反编译代码并删除支票,所以我只是想让他们更难滥用软件,我不想要他们能够自己制作许可证或将一个许可证移到另一台机器上.
有人能指出我正确的方向或提供一些建议吗?
谢谢.
我想知道是否可以运行以下代码但没有取消装箱行: -
t.Value = (T)x;
Run Code Online (Sandbox Code Playgroud)
或者,如果有另一种方法可以做这种操作?
这是完整的代码: -
public class ValueWrapper<T>
{
public T Value { get; set; }
public bool HasValue { get; set; }
public ValueWrapper()
{
HasValue = false;
}
}
class Program
{
static void Main(string[] args)
{
Dictionary<string, object> myDictionary = new Dictionary<string, object>();
myDictionary.Add("key1", 6);
myDictionary.Add("key2", "a string");
var x2 = GetValue<int>(myDictionary, "key1");
if (x2.HasValue)
Console.WriteLine("'{0}' = {1}", "key1", x2.Value);
else
Console.WriteLine("No value found");
Console.ReadLine();
}
static ValueWrapper<T> GetValue<T>(IDictionary<string, object> dictionary, string key)
{ …Run Code Online (Sandbox Code Playgroud) 我只是想知道如果我要在Web应用程序中加载相同的汇编字节两次会发生什么.
例如,我有这个代码
byte[] assem = System.IO.File.ReadAllBytes(appRoot + "/Plugins/Plugin.dll");
var loadedAssem = Assembly.Load(assem);
var plugin = loadedAssem.CreateInstance("Plugin.ThePlugin") as IPlugin;
Run Code Online (Sandbox Code Playgroud)
我运行此代码,并在第一个请求我假设它将程序集加载到ram(或http运行时appdomain?)然后我可以创建其中的任何内容的实例.
如果我再次运行此代码,请在第二个请求上说第一个请求上的程序集会发生什么?
ram还会存在吗?如果是这样,它如何区分两个组件?还是会覆盖以前的声明类?
这是我的理解,就像我在PHP中所做的那样,它不仅仅是"require_once"的情况.