拌合楼管理系统(十九)ini配置文件本地加密

2024-05-13 02:28

本文主要是介绍拌合楼管理系统(十九)ini配置文件本地加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前 言:

      项目中,数据库服务器与程序不在一起,且不允许通过互联网直接访问数据库。 解决方法是通过web服务来做中间件来解决数据交互的问题。但如果web服务交互又存在身份验证问题,需要实现访问对应的接口是经过授权的,未授权的是不返回数据。   可能有人说为啥不采取限定IP地址的方式?程序调用没有固定的公网IP。走VPN是一种解决方法,但需要额外的安装软件和设备。
      我采用用的方式是每次访问都带上一个key,在web服务器端进行key的校验,如果一致那么返回数据,这样是最简单的方式。 当然最好的做法是访问带上证书,通过证书来校验访问是否授权的。但配置是比较麻烦的。所以我也没有采用这种方式。
        但是同样带了一个问题,如果key直接写死在应用中,那么长期不变也存在风险。每次变更key需要重新更新程序也麻烦。所以key最后决定是写入到ini的配置文件中,但这样又带来了另外一个问题,如果ini文件被人获取道了,那不是就可以用key直接访问了?所以这就需要给key来加密,同时在程序中进行解密存储。

实现路径:

        一、如何读取ini 配置文件:

        1. 安装sunnyUI ,通过Nuget包管理器搜索SunnyUI安装:

        sunnyUI是一个c#的winfrom 开源控件库,这里用他工具类库中  IniConfig - ini配置文件类

        2. 创建Setting类,实例代码如下

 [ConfigFile("Config\\Setting.ini")]public class Setting : IniConfig<Setting>{[ConfigSection("Hello")]public string SoftName { get; set; }public string ServerIP { get; set; }public int ServerPort { get; set; }public string City { get; set; }public override void SetDefault(){base.SetDefault();SoftName = "XX软件";ServerIP = "192.168.1.2";ServerPort = 9090;City = "南京";}}

              3. 类功能解释

[ConfigFile("Config\Setting.ini")]
配置ini文件的位置,当前程序目录下Config目录下的Setting.ini。
*目录不存在时会自动创建目录

[ConfigSection("Hello")]
设置SoftName所在的节点Section的名称,如果不设置则默认为Setup

public override void SetDefault()
当第一次运行时配置文件不存在时,设置配置的默认值,并保存至文件。

  • 读取
    读取系统配置,并开始应用:
        Setting.Current.Load();TcpClient client = new TcpClient();client.Connect(Setting.Current.ServerIP, Setting.Current.ServerPort);

Setting.Current.Load();
读取配置信息,将配置文件Setting.ini里的值读取到类的属性中。
这样Setting.Current.ServerIP和Setting.Current.ServerPort就可以直接用了。
如果需要修改配置,修改Setting.ini,重新读取就可以了。
注意:配置读取,属性的应用,都是用的Setting.Current,而不是Setting

  • 保存
    系统修改配置,并保存到配置文件。
    例如系统中修改了获取天气的城市为重庆:
        Setting.Current.City = "重庆";Setting.Current.Save();

修改Setting.Current的属性,并通过Setting.Current.Save()保存即可。

  • 其他
    通过IniConfig配置文件的应用,屏蔽ini文件常用的通过section,name的字符串值来获取参数的繁琐过程。
    1、建议读写的ini文件为IniConfig存储的文件。以免造成文件编码不统一。即先生成这个文件,再进行修改,而不是手动创建配置文件。
    2、配置读取,保存类的应用,都是用的Setting.Current,而不是Setting。

             二、 字符串的加密和解密

     使用SHA1加密、DES加密/解密,网上找的代码

        

    /// <summary>/// 字符串加密解密类/// </summary>public sealed class StringSecurity{private StringSecurity() { }#region SHA1 加密/// <summary>/// 使用SHA1加密字符串。/// </summary>/// <param name="inputString">输入字符串。</param>/// <returns>加密后的字符串。(40个字符)</returns>public static string StringToSHA1Hash(string inputString){SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();byte[] encryptedBytes = sha1.ComputeHash(Encoding.ASCII.GetBytes(inputString));StringBuilder sb = new StringBuilder();for (int i = 0; i < encryptedBytes.Length; i++){sb.AppendFormat("{0:x2}", encryptedBytes[i]);}return sb.ToString();}#endregion#region DES 加密/解密private static byte[] key = ASCIIEncoding.ASCII.GetBytes("uiertysd");private static byte[] iv = ASCIIEncoding.ASCII.GetBytes("99008855");/// <summary>/// DES加密。/// </summary>/// <param name="inputString">输入字符串。</param>/// <returns>加密后的字符串。</returns>public static string DESEncrypt(string inputString){MemoryStream ms = null;CryptoStream cs = null;StreamWriter sw = null;DESCryptoServiceProvider des = new DESCryptoServiceProvider();try{ms = new MemoryStream();cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write);sw = new StreamWriter(cs);sw.Write(inputString);sw.Flush();cs.FlushFinalBlock();return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);}finally{if (sw != null) sw.Close();if (cs != null) cs.Close();if (ms != null) ms.Close();}}/// <summary>/// DES解密。/// </summary>/// <param name="inputString">输入字符串。</param>/// <returns>解密后的字符串。</returns>public static string DESDecrypt(string inputString){MemoryStream ms = null;CryptoStream cs = null;StreamReader sr = null;DESCryptoServiceProvider des = new DESCryptoServiceProvider();try{ms = new MemoryStream(Convert.FromBase64String(inputString));cs = new CryptoStream(ms, des.CreateDecryptor(key, iv), CryptoStreamMode.Read);sr = new StreamReader(cs);return sr.ReadToEnd();}finally{if (sr != null) sr.Close();if (cs != null) cs.Close();if (ms != null) ms.Close();}}#endregion}

        没有花太多功夫去研究,能用就好。

private static byte[] key = ASCIIEncoding.ASCII.GetBytes("uiertysd");
private static byte[] iv = ASCIIEncoding.ASCII.GetBytes("99008855");

        key和iv 可以修改为自己的,但是需要是8位。       在ini配置文件中,可以保存密文,读取配置后,使用解密程序解密出来明文的key就可以了。

这篇关于拌合楼管理系统(十九)ini配置文件本地加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984429

相关文章

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获