标签:软件

OpenCC.NET GUI——方便的中文转换工具

之前我基于OpenCC写过一个OpenCC.NET的库,写得也比较烂,就想稍微重构一下然后再写个即开即用的桌面端程序,于是就有了这个OpenCC.NET GUI。 本来是想尝鲜用Win UI3来实现的,最后还是决定稳妥点用了WPF 虽然我完全不懂设计,但程序总得有个Logo。于是我把「字」字做了一点改造,搞出一个类似转换箭头的结构,代表中文转换;然后分层加阴影和光照,尝试去模仿Fluent Design图标的那种质感,最后就得到了: 程序已经开源放在了GitHub和Gitee上,有兴趣的可以取看看,地址: 下面的部分我就偷懒直接照抄readme了。 OpenCC.NET GUI是基于OpenCC(Open Chinese Convert, 开放中文转换),使用实现的中文转换工具,支持中文简繁体之间词汇级别的转换,同时还支持地域间异体字以及词汇的转换。 可以直接在仓库页面右侧获取最新Release版本,或下载源码后自行编译。若无法运行,请确保安装了。 软件提供了文本编辑转换和文件批量转换两种功能。 此模式下直接在文本框中输入你所需要转换的语句,在右侧选择转换选项后,点击转换按钮即可得到结果。 此模式下可以批量导入txt文本文件进行转换。若生成文件为乱码,请确保原文件为UTF 实现文本转换。 为OpenCC.NET提供词库。 为OpenCC.NET提供分词。 提供UI控件。 提供选择文件夹窗口(没错,WPF没有自带选择文件夹窗口)。

阅读全文

基于RSA算法的软件授权生成和验证

又摸了好久,结果博客都好几个月没更新,是时候水一水了。刚好前段时间听说项目要加授权功能,便对如何实现这种利用激活码进行授权的形式产生了兴趣,决定动手试一试,并以此文加以记录。 我对加密算法相关的东西完全一窍不通,据我搜索的资料(指用百度和Google,如有错误请指出),适用于生成软件激活码这种场景的是非对称加密算法。 非对称加密算法和对称加密算法的区别主要在于密钥,对称加密算法只有一个密钥,如果用于激活码生成,那么在生成端和验证端都必须保存这个密钥,用户就能比较简单地获取。之后用户一旦得到一个可用激活码,就可以将其解码后按照授权信息结构伪造激活码。 而非对称加密算法则有一个公钥(较简单)和一个密钥(较复杂),公钥可以公开,而私钥则要保密。生成激活码时使用私钥,用户只能接触到公钥,而依靠公钥只能验证激活码但无法生成激活码,就达到了我们的目的。 非对称加密算法中一种常用算法是RSA算法,如果使用SSH时有生成和使用过SSH key的话应该会有印象。它的公钥(PEM格式)形式为: 私钥(PEM格式)形式为: RSA算法主要有两种用途,一种是加密与解密信息,另外一种是签名与验证信息。 RSA算法的加密与解密功能,主要是把原始信息利用公钥加密,传输给他人后,利用私钥将其解密重新得到原始信息。这主要保证了信息不会被泄露,因为公钥只能加密不能解密,即使被他人获取了也没有关系。而只有手中有私钥的人才能解密,获取原始信息的内容。 这里引用一段所举的例子: 那么能不能利用加密和解密来实现激活码生成呢?我个人认为算是勉强可以。虽然按照原理来说必须靠公钥加密,私钥解密,也就是公钥生成激活码,私钥对激活码解码。可上文说了私钥必须保密,怎么能保存在客户端呢?但我们其实也可以把两者的地位交换,即把原始公钥保密,作为密钥;而把原始密钥公开,作为公钥。这样就可以用新密钥(原公钥)加密授权信息制作激活码,然后在客户端保存新公钥(原密钥),用于解密和检查激活码。 但实际上RSA算法的密钥包含了公钥信息(所以密钥才会相对公钥更复杂),用这种方式制作的激活码只能防住一般用户,如果用户从新公钥(原密钥)中推导出了新密钥(原公钥),那么我们授权系统也基本等于被攻破了。 RSA算法的签名与验证功能,主要是把原始信息利用密钥对其进行签名,附上原始信息一起传输给他人后(签名只能供验证用途,无法恢复出原始信息,所以要附带上原始信息),利用公钥对签名和原始信息进行验证,若验证通过则说明信息真实有效。这主要保证了信息不会被篡改,因为只有手中有密钥的人才能制造有效签名来实现和篡改的信息一致,否则篡改信息无法通过公钥的验证。 这里再引用一段所举的例子: 因为加密与解密方案行不通,所以我们就通过签名和验证方案来实现软件授权激活码的生成和验证。主要原理其实也很简单,就是上面所说的,将验证信息用私钥签名后,将信息和签名打包成激活码,卖给用户。用户输入激活码后,客户端用公钥根据签名验证授权信息真实有效,予以授权。即使授权信息的格式相当于直接暴露,但由于无法伪造签名,伪造的授权信息无法通过验证,也能够保证安全性。 授权信息的作用是授权给固定对象,比如固定一个人和一台设备以及一定时间,防止激活码泄露后被滥用。 授权信息基本应该包括被授权人的基本信息(姓名、邮箱和账号等)、机器的基本信息(MAC地址,其他硬件的序列号,通过算法生成的机器码等)还有授权的有效时间(到期后不可使用)。除此以外还可以添加一些其他信息,比如对分价位的不同授权(基础版、普通版、高级版)做区分,对一些高级功能做限制等等。 本文代码主要使用C demo中授权信息由邮箱、有效日期和MAC地址构成,然后利用私钥进行加密。然后将授权信息长度 ```csharp public void GenerateLicense() { // 授权信息,为Json格式 var data = JsonSerializer.SerializeToUtf8Bytes(this); // 导入私钥 var rsa = new RSACryptoServiceProvider(); try { rsa.ImportFromPem(PrivateKey.AsSpan()); } catch (ArgumentException) { MessageBox.Show("私钥错误!"); return; } // 密钥由授权信息长度 // 用2个byte来存储信息长度 var dataLen = data.Length; var dataLenByte = new byte

阅读全文

Fluent Blog上线了

学习ASP.NET Core的同时练习编写的渣作Fluent Blog今天终于上线了,地址为,欢迎访问。 特点: 目前完成的功能: 接下来可能的目标: Gitee项目地址: 代码写的很烂,请多多包涵 博客主站:

阅读全文

记一个ASP.NET调用原生C++ DLL的坑

摸了好久都没写文,主要寒假在玩以及在写实验室项目。 刚好最近实验室项目图像处理部分要用到C 后来根据才发现,这个库包含了native的C 解决方法就是照上面链接给出的在写托管DLL的时候将原CLL延迟载入。但是因为这个库并不是我自己的,没法改动,估计只能零写一个单独的应用程序,通过进程间通信的方式来给后端提供数据了。

阅读全文

正在用ASP.NET Core写一个博客框架

好久没更博客了,主要是一边上课和给实验室打工,一边在自学ASP.NET Core。 学的同时在写一个博客框架,基础的MVC架构,视觉上用了微软的Fluent Design。目前主页部分基本完成,文章页面、Tag、友链都还没完成,路还很漫长...... 丢个预览视频:

阅读全文
公告栏

欢迎来到Fluent Blog,一个基于ASP.NET Core 5.0 MVC的博客。前往主站请访问www.cosineg.com

动态
@余弦G:

博客部署成功~

2021/4/22 上午12:15:08
115