
计算机问题
文章平均质量分 59
还是叫明
这个作者很懒,什么都没留下…
展开
-
VirtualBox主机与虚拟机互相ping通的方法
一般情况下,按照VirtualBox默认的配置,主机可以ping通虚拟机,但虚拟机不能ping通主机。但是使用上面的配置,虚拟机内就不能连接外网了。如果想跟主机ping通,又能连接外网下载东西,那么需要增加一个网卡。2、 在高级部分,控制芯片不要使用默认的,要改成PCnet-Fact III。2、在高级部分,控制芯片不要使用默认的,要改成PCnet-Fact III。使用上面的配置后,虚拟机就既能ping通,又能上网了。就是上面两个改动,然后就可以双端都ping通。1、连接方式选择网络地址转换(NAT)。.原创 2022-05-16 15:02:11 · 4652 阅读 · 2 评论 -
.NET单机软件保护策略(3)机器码和有效期
机器码机器码是一台电脑的身份证,在软件认证时就是对这个身份进行认证。一般机器码由提取电脑的硬件信息生成,包括CPU ID、硬盘序列号、主板序列号和MAC地址等。正常的电脑以上信息都有,但也不排除部分没有,例如没有网卡,就没有MAC地址。但这不影响,我们使用某一个,或某些合并到一起都可以。获取CPU ID:ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc原创 2021-11-18 13:35:26 · 1074 阅读 · 1 评论 -
.NET单机软件保护策略(2)软件证书制作
单机软件的一个特点是,你毫无保留地把程序都交给用户了。所以,如果软件能够反编译,任何的证书都形同虚设。也正因为此,我们下面所谈的,都是在软件已经过保护,不能反编译为前提的。软件的认证,一般有三种元素存在: 机器认证:只能在特定的机器上运行。 用户认证:认证跟特定的用户名关联。 时间认证:有固定的有效期,超出时间认证失效。 对于单机软件来说,更多时候是机器认证和时间认证结合,用户认证不太可用,因为用户名可以交给其他人使用。本文先介绍机器认证的方法。软件证书制作和使用的原创 2021-11-18 11:37:34 · 559 阅读 · 0 评论 -
.NET单机软件保护策略(1)防反编译
.NET单机软件的保护有两大难点,分别是: 编译的结果不是机器码,而是IL代码,反编译非常容易。 不联网的软件没听说过不能破解的。 所以,我们的保护策略也不是说绝对的安全,只是能防多少是多少。首先对于第一点,我们先看一个例子,以产生直观的感受。假设我们写了一个简单的软件,代码如下所示:static void Main(string[] args){ if (!CheckVerify("my_password")) { return;原创 2021-11-18 10:39:03 · 1490 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(六)
A*迷宫寻路算法在A*算法里面,有两个概念,一个是已经走过的步数G,一个是走到目标需要的步数H。例如我从起点S出发,S的G就是0了。往右走一格到T,那T的G就是0+1=1。再走一步,就是1+1=2。反正从G=g的点出发,走一格后的G就是g+1。H也很好算。例如目标是(m,n),当然格是(u,v),那么H=abs(u-m)+abs(v-n)算出G和H之后,我们要算一个F,简单的话,F...原创 2018-12-05 17:04:49 · 1087 阅读 · 0 评论 -
创建同时基于.NET Framework、.NET Core、.NET Standard项目的方法
如果我们开发Windows用户程序(WPF、Winform),我们会用到.NET Framework。如果我们要做跨平台的应用,我们会用到.NET Core。既然是跨平台,是不是.NET Core的项目可以用在WPF上呢?并不可以,.NET Core没有Windows的特性,不能直接用在WPF上。但实际上,我们开发的一些类库,并不涉及到Windows特性,例如我们只是实现某些算法,纯数学的...原创 2019-06-06 10:34:08 · 5632 阅读 · 0 评论 -
.NET Core网站发布到Linux系统的方法(一)
我是一名.NET开发者,精通Windows下的应用和网站开发,但对于Linux则算是一个小白。微软推出了.NET Core,让我们可以在Linux下部署.NET程序。痛苦地折腾了两天,终于解决了所有问题,在Linux下成功运行.NET Core开发的网站。由于过程实在复杂,所以分成了几篇。一、环境开发工具:Visual Studio 2017项目类型:ASP.NET Core Web...原创 2019-09-04 19:28:58 · 2705 阅读 · 0 评论 -
.NET Core网站发布到Linux系统的方法(二)
三、在Linux系统下安装.NET Core微软官网有非常详细的说明,按照此说明做就行。网址:https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current安装完成以后,其实我们已经可以运行.NET网站了。运行以下语句:cd /var/www/testwebdotnet ...原创 2019-09-04 20:08:56 · 765 阅读 · 0 评论 -
.NET Core网站发布到Linux系统的方法(三)
五、安装和配置Nginx在这里,Nginx是一个代理的作用。它接受请求,然后交给.NET Core自带的服务器Kestrel去处理。首先,我们执行以下语句安装Nginx:sudo apt-get install nginx安装完成以后,如果我们在浏览器输入http://localhost/,将会看到以下页面:接着,打开/etc/nginx/sites-avaliable目...原创 2019-09-05 08:42:42 · 461 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(五)
使用递归切割算法生成迷宫要说明递归切割算法,我们先来看下图:(1)在r1到r2这段线上面,随机地点3个点,分别是rd1、rm、rd2。c同理。(2)通过rm和cm两根线,矩形被分成了4块。(3)我们看红圈的地方,总共有4个,分别是(rm,cd1)、(rd2,cm)、(rm,cd2)和(rd1,cm)。(4)4个红圈,只要打通任意3个,四块区域就能连通起来。(5)我们把这...原创 2018-12-05 16:48:06 · 1719 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(四)
使用随机算法生成迷宫随机算法的思路是这样的:(1)把起点S放到一个列表里面。(2)随机地从列表里取出一个格子,把它标记为1。如果跟它相邻的格子没有被访问过,则标记为2,放到列表里。如果已经访问过,随机挑一个,打通墙。(3)重复第一步。其流程如下图所示:随机算法代码如下:public override void Build(){ InitM(); ...原创 2018-12-05 16:20:50 · 2014 阅读 · 3 评论 -
动态密码设计
一、需求我们一开始构想动态密码的使用场景是这样的:(1)现场人员查看设备ID,把ID发给设备管理人员。(2)设备管理人员登录平台,用设备ID换取动态密码,并把动态密码发给现场人员。(3)现场人员把密码输入仪器,使用最高权限。这样的流程是比较安全的,唯一的缺陷是现场人员每次使用都要找设备管理人员,人力成本极高。正是这个缺陷,导致这一方案直接推翻。 我们考虑另外一个使用场景...原创 2018-09-21 10:05:59 · 3960 阅读 · 0 评论 -
象棋和五子棋AI的开发(一)
刚出来工作的时候,用C++做过一个五子棋的AI,那时候已基本达到了自己战胜不了电脑的水平。当然,自己的水平相当有限,不能以此作为标准。最近心血来潮,想做一款象棋的,看了一些资料之后,发现五子棋也可以再写一遍。于是就使用C#做了象棋和五子棋的AI,都达到了自己无法战胜的水平。一开始,我以为五子棋更简单一些,毕竟象棋的走法更复杂,但做下来发现,其实五子棋是更复杂、计算量更大的一个棋类。程序的内...原创 2018-11-26 10:59:28 · 1737 阅读 · 0 评论 -
象棋和五子棋AI的开发(二)
二、基类这是两种棋子算法共有的部分。public abstract class IGame<T>{ /// <summary> /// 伪无限大 /// </summary> protected const int MAX_VALUE = 100000000; /// <summary> /...原创 2018-11-26 11:13:06 · 418 阅读 · 1 评论 -
象棋和五子棋的AI开发(三)
三、象棋AI算法3.1 走法相对于五子棋,象棋的走法是更复杂的。在走法里面,要说的东西不多,我直接贴代码:protected override List<Step> GenerateAllMove(ChessColor c){ List<Step> moves = new List<Step>(); for (int i = 0...原创 2018-11-26 11:32:03 · 442 阅读 · 0 评论 -
象棋和五子棋的AI开发(四)
四、五子棋AI算法相较于象棋,五子棋的走法相当简单,也就是空白的地方都可以走。但五子棋的棋局判断,也就是估值函数比较复杂。另外,在一开始的时候,五子棋的可走步数是254、252、250,而象棋基本都是40多,所以五子棋每一层的运算量都会更大。后面我们会说到一些五子棋的优化方法。4.1 估值核心这是五子棋AI算法里面最复杂的一部分。五子棋的得分是基于线的,这些线可以是横的、竖的,也可以是...原创 2018-11-26 15:14:33 · 904 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(一)
4种经典的迷宫生成算法是:(1)使用并查集算法生成(2)使用深度优先算法生成(3)使用随机算法生成(4)使用递归切割算法而迷宫寻路使用A*算法。我把所有迷宫生成定义成一个虚类,每一种生成算法是继承虚类的一个实现。当然,寻路算法也在虚类中,因为无论迷宫如何生成,寻路算法都是一样的。为了阅读的流畅性,在下面的代码中,暂不包含寻路算法。/// <summary>...原创 2018-12-05 15:14:10 · 4428 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(二)
使用并查集算法生成迷宫我们把迷宫先初始化为这样一个矩阵:每一个格子互不相连,如果使用区域的定义的话,每个格子就是一个区域。如果迷宫矩阵大小是m*n,那它在最开始拥有m*n个区域。(1)随机选择两个相邻的格子,把它们合成一个区域。如下图所示,当我们把5和6合并时,2、4、5、6、9将变成同一个区域。(2)在每一次合并后,我们都检查起点S和终点T是否在同一个区域里。如果是,程序结束...原创 2018-12-05 15:38:11 · 2375 阅读 · 0 评论 -
C#实现4种经典迷宫生成算法和迷宫寻路算法(三)
使用深度优先算法生成迷宫后面讲述的三种生成算法,都用到了一个中间矩阵。所以我们把对中间矩阵的处理放在了一个虚类里。中间矩阵是一个三维矩阵,前面两维还是行和列,而最后一维则表示:左、上、右、下的墙是否存在,以及本格子是否访问过。/// <summary>/// 迷宫接口2/// </summary>public abstract class IMaze2 : ...原创 2018-12-05 15:55:18 · 2309 阅读 · 0 评论 -
强制刷新程序图标的方法
当我们把写好的程序放在桌面,后来又改了程序的图标时,我们发现程序的图标还是旧的,根本没有变。这是因为Windows为了性能,把图标都缓存起来的缘故。解决方案如下:把以下这段代码复制到文本文件里:rem 关闭Windows外壳程序explorer taskkill /f /im explorer.exe rem 清理系统图标缓存数据库 attrib -h -s...原创 2018-09-07 14:03:17 · 2658 阅读 · 2 评论