CANoe软件授权方式

10 篇文章 0 订阅
1、CANoe软件加密方法

        由于CANoe软件本身的UI都是不能够加密的,随着CANoe工程复杂度不断提升,公司内部将其视为重要的内部项目资源,将网络上的一个常用加密方式在这里介绍。

2、C#上位机编写加密与注册表方法

        1、软件UI在这里不做展示,过于简单;

        2、我使用C#进行注册机和文本加密方法,将解密的电脑授权解密;

        3、CANoe端使用C++读取加密的注册表和授权时间,每次启动读取是否一致。

3、代码--部分
#region Aes加密 解密-ECB模式
        /// <summary>
        /// Aes加密-ECB模式
        /// </summary>
        /// <param name="encryString">待加密字符</param>
        /// <param name="secretKey">密钥</param>
        public static string EncryptionECB(string encryString, string secretKey = "E0AA011E21ADDBD6D8FECEC71E9CF563")
        {
            //加密后的字节数组
            byte[] encryByte;

            using (Aes aes = Aes.Create())
            {
                //密钥
                aes.Key = Encoding.UTF8.GetBytes(secretKey);
                //加密模式
                aes.Mode = CipherMode.ECB;
                //填充模式
                aes.Padding = PaddingMode.PKCS7;

                //加密器
                ICryptoTransform encryptor = aes.CreateEncryptor();

                //创建内存流
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    //创建加密流(存储在内存流中)
                    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        //将待加密字符写入加密流进行加密
                        using (StreamWriter streamWriter = new StreamWriter(cryptoStream))
                        {
                            streamWriter.Write(encryString);
                        }
                    }
                    encryByte = memoryStream.ToArray();
                }
            }

            // 编码为Base64字符串
            string base64String = Convert.ToBase64String(encryByte);
            return base64String;
        }
        /// <summary>
        /// Aes解密-ECB模式
        /// </summary>
        /// <param name="decryString">待解密字符</param>
        /// <param name="secretKey">密钥</param>
        public static string DecryptionECB(string decryString, string secretKey = "E0AA011E21ADDBD6D8FECEC71E9CF563")
        {
            string str = string.Empty;

            using (Aes aes = Aes.Create())
            {
                //密钥
                aes.Key = Encoding.UTF8.GetBytes(secretKey);
                //加密模式
                aes.Mode = CipherMode.ECB;
                //填充模式
                aes.Padding = PaddingMode.PKCS7;

                //解密器
                ICryptoTransform decryptor = aes.CreateDecryptor();

                //密文
                byte[] encryByte = Convert.FromBase64String(decryString);

                //创建内存流
                using (MemoryStream memoryStream = new MemoryStream(encryByte))
                {
                    //创建解密流
                    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader streamReader = new StreamReader(cryptoStream))
                        {
                            str = streamReader.ReadToEnd();
                        }
                    }
                }
            }
            return str;
        }
 
     #endregion

public class SoftRegUnlock
    {
        public int[] intCode = new int[127];    //存储密钥
        public char[] charCode = new char[25];  //存储ASCII码
        public int[] intNumber = new int[25];   //存储ASCII码值

        //初始化密钥
        public void SetIntCode()
        {
            for (int i = 1; i < intCode.Length; i++)
            {
                intCode[i] = i % 9;
            }
        }

        ///<summary>
        /// 生成注册码
        ///</summary>
        ///<returns></returns>
        public string GetRNum(string strMNum)
        {
            SetIntCode();

            for (int i = 1; i < charCode.Length; i++)   //存储机器码
            {
                charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
            }
            for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
            {
                intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
            }
            string strAsciiName = "";   //注册码
            for (int k = 1; k < intNumber.Length; k++)  //生成注册码
            {

                if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
                    <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
                {
                    strAsciiName += Convert.ToChar(intNumber[k]).ToString();
                }
                else if (intNumber[k] > 122)  //判断如果大于z
                {
                    strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
                }
                else
                {
                    strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
                }
            }
            return strAsciiName;
        }
    }

4、感谢

        所涉及到的代码都是网络上百度的,这个按照我这个方法,也可以网上百度收集相关的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值