CANoe软件授权方式
由于CANoe软件本身的UI都是不能够加密的,随着CANoe工程复杂度不断提升,公司内部将其视为重要的内部项目资源,将网络上的一个常用加密方式在这里介绍。所涉及到的代码都是网络上百度的,这个按照我这个方法,也可以网上百度收集相关的代码。3、CANoe端使用C++读取加密的注册表和授权时间,每次启动读取是否一致。2、我使用C#进行注册机和文本加密方法,将解密的电脑授权解密;1、软件UI在这里不做展示
·
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、感谢
所涉及到的代码都是网络上百度的,这个按照我这个方法,也可以网上百度收集相关的代码。
更多推荐
已为社区贡献7条内容
所有评论(0)